UNPKG

petrol

Version:

A javascript unit testing tool designed to be simple, to install it and start writing tests. that's it. No webpack, No karma. No distractions.

185 lines (142 loc) 5.6 kB
import BaseTestCase from "../core/BaseTestCase"; import concordance from "concordance"; import {AssertionError} from 'assert'; class TestCase extends BaseTestCase { /** * Asserts that a variable is of a given type. */ assertInstanceOf(expected, actual, message = '') { this.assertString(expected); this.assertObject(actual); let defaultMessage = `Expected object to be instance of [${expected}], ${actual.constructor.name} given`; this.assertTrue(actual.constructor.name == expected, message || defaultMessage); } /** * Asserts the number of elements of an array. */ assertCount(expectedCount, haystack, message = '') { this.assertInteger(expectedCount); if (typeof haystack.length == 'undefined') { throw new Error('The second argument of assertCount() must have length property'); } let defaultMessage = `Expected ${expectedCount} elements, but found ${haystack.length}`; this.assertEquals(expectedCount, haystack.length, message || defaultMessage); } /** * Asserts that two variables are equal. */ assertEquals(expected, actual, message = '') { if (!concordance.compare(expected, actual).pass) { throw new AssertionError({message : `${message}\n${concordance.diff(expected, actual)}`}); } } /** * Asserts that two variables are not equal. */ assertNotEquals(expected, actual, message = '') { if (concordance.compare(expected, actual).pass) { let defaultMessage = `Expected value is equal to actual value`; throw new AssertionError({message: message || defaultMessage}); } } /** * Asserts that two variables have the same type and value. * Used on objects, it asserts that two variables reference * the same object. */ assertSame(expected, actual, message = '') { if (!Object.is(expected, actual)) { let defaultMessage = `Expected value is not the same than actual`; throw new AssertionError({message: `${message || defaultMessage}\n${concordance.diff(expected, actual)}`}); } } /** * Asserts that two variables do not have the same type and value. * Used on objects, it asserts that two variables do not reference * the same object. */ assertNotSame(expected, actual, message = '') { if (Object.is(expected, actual)) { let defaultMessage = `Expected value is the same than actual`; throw new AssertionError({message: message || defaultMessage}); } } /** * Asserts that a condition is true. */ assertTrue(condition, message = '') { let defaultMessage = `Expected true, but got false`; this.assertEquals(true, condition, message || defaultMessage); } /** * Asserts that a condition is false. */ assertFalse(condition, message = '') { let defaultMessage = `Expected false, but got true`; this.assertEquals(false, condition, message || defaultMessage); } /** * Asserts that an object has a specified property. */ assertObjectHasProperty(property, object, message = '') { this.assertString(property); this.assertObject(object); let defaultMessage = `Property [${property}] was not found on object ${JSON.stringify(object)} ${message}`; this.assertTrue(typeof object[property] != 'undefined', message || defaultMessage); } /** * Asserts that an object does not have a specified property. */ assertObjectNotHasProperty(property, object, message = '') { this.assertString(property); this.assertObject(object); let defaultMessage = `Property [${property}] was found on object ${JSON.stringify(object)} ${message}`; this.assertTrue(typeof object[property] == 'undefined', message || defaultMessage); } /** * Asserts that a string contains a needle. */ assertContains(needle, string, message = '') { this.assertString(needle); this.assertString(string); let defaultMessage = `Expected '${string}' to contain '${needle}'`; this.assertTrue(string.includes(needle), message || defaultMessage); } /** * Asserts that a string does not contain a needle. */ assertNotContains(needle, string, message = '') { this.assertString(needle); this.assertString(string); let defaultMessage = `Expected '${string}' to not contain '${needle}'`; this.assertFalse(string.includes(needle), message || defaultMessage); } /** * Asserts that a value is null */ assertNull(actual, message = '') { let defaultMessage = `Expected null, but got ${typeof actual}`; this.assertEquals(null, actual, message || defaultMessage); } /** * Asserts that a value is not null */ assertNotNull(actual, message = '') { let defaultMessage = `Unexpected null value`; this.assertNotEquals(null, actual, message || defaultMessage); } /** * Asserts that a script executed on callback throws an error */ expectsError(callback, message = '') { this.assertFunction(callback); let defaultMessage = 'Expected error has not been thrown'; try { callback(); } catch (e) { return; } throw new AssertionError({message: message || defaultMessage}); } } export default TestCase;