vest 3.3.0-dev-549cb1 → 4.0.0-dev-deabb8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +43 -30
- package/dist/cjs/vest.development.js +158 -125
- package/dist/cjs/vest.production.js +1 -1
- package/dist/es/vest.development.js +158 -125
- package/dist/es/vest.production.js +1 -1
- package/dist/umd/vest.development.js +158 -125
- package/dist/umd/vest.production.js +1 -1
- package/docs/migration.md +19 -0
- package/package.json +74 -65
- package/testUtils/itWithContext.ts +5 -1
- package/testUtils/runCreateRef.ts +1 -1
- package/types/vest.d.ts +21 -14
|
@@ -200,7 +200,7 @@
|
|
|
200
200
|
return { allOf: allOf, anyOf: anyOf, noneOf: noneOf, oneOf: oneOf, optional: optional$1 };
|
|
201
201
|
}
|
|
202
202
|
|
|
203
|
-
function isStringValue
|
|
203
|
+
function isStringValue(v) {
|
|
204
204
|
return String(v) === v;
|
|
205
205
|
}
|
|
206
206
|
|
|
@@ -611,7 +611,7 @@
|
|
|
611
611
|
return ruleReturn(result);
|
|
612
612
|
}
|
|
613
613
|
else {
|
|
614
|
-
return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args)));
|
|
614
|
+
return ruleReturn(result.pass, optionalFunctionValue.apply(void 0, __spreadArray([result.message, ruleName, value], args, false)));
|
|
615
615
|
}
|
|
616
616
|
}
|
|
617
617
|
function validateResult(result) {
|
|
@@ -645,9 +645,9 @@
|
|
|
645
645
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
646
646
|
args[_i] = arguments[_i];
|
|
647
647
|
}
|
|
648
|
-
var transformedResult = transformResult.apply(void 0, __spreadArray([ctx$1.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args)); }),
|
|
648
|
+
var transformedResult = transformResult.apply(void 0, __spreadArray([ctx$1.run({ value: value }, function () { return rule.apply(void 0, __spreadArray([value], args, false)); }),
|
|
649
649
|
ruleName,
|
|
650
|
-
value], args));
|
|
650
|
+
value], args, false));
|
|
651
651
|
if (!transformedResult.pass) {
|
|
652
652
|
if (isEmpty(transformedResult.message)) {
|
|
653
653
|
throwError("enforce/" + ruleName + " failed with " + JSON.stringify(value));
|
|
@@ -677,7 +677,7 @@
|
|
|
677
677
|
}
|
|
678
678
|
var rule = getRule(ruleName);
|
|
679
679
|
registeredRules.push(function (value) {
|
|
680
|
-
return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args)), ruleName, value], args));
|
|
680
|
+
return transformResult.apply(void 0, __spreadArray([rule.apply(void 0, __spreadArray([value], args, false)), ruleName, value], args, false));
|
|
681
681
|
});
|
|
682
682
|
var proxy = {
|
|
683
683
|
run: function (value) {
|
|
@@ -897,10 +897,6 @@
|
|
|
897
897
|
function createCache(maxSize) {
|
|
898
898
|
if (maxSize === void 0) { maxSize = 10; }
|
|
899
899
|
var cacheStorage = [];
|
|
900
|
-
/**
|
|
901
|
-
* @param {any[]} deps dependency array.
|
|
902
|
-
* @param {Function} cache action function.
|
|
903
|
-
*/
|
|
904
900
|
var cache = function (deps, cacheAction) {
|
|
905
901
|
var cacheHit = cache.get(deps);
|
|
906
902
|
// cache hit is not null
|
|
@@ -913,10 +909,17 @@
|
|
|
913
909
|
}
|
|
914
910
|
return result;
|
|
915
911
|
};
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
912
|
+
// invalidate an item in the cache by its dependencies
|
|
913
|
+
cache.invalidate = function (deps) {
|
|
914
|
+
var index = cacheStorage.findIndex(function (_a) {
|
|
915
|
+
var cachedDeps = _a[0];
|
|
916
|
+
return lengthEquals(deps, cachedDeps.length) &&
|
|
917
|
+
deps.every(function (dep, i) { return dep === cachedDeps[i]; });
|
|
918
|
+
});
|
|
919
|
+
if (index > -1)
|
|
920
|
+
cacheStorage.splice(index, 1);
|
|
921
|
+
};
|
|
922
|
+
// Retrieves an item from the cache.
|
|
920
923
|
cache.get = function (deps) {
|
|
921
924
|
return cacheStorage[cacheStorage.findIndex(function (_a) {
|
|
922
925
|
var cachedDeps = _a[0];
|
|
@@ -1109,6 +1112,13 @@
|
|
|
1109
1112
|
return false;
|
|
1110
1113
|
}
|
|
1111
1114
|
|
|
1115
|
+
function getFailuresArrayOrObject(group, fieldName) {
|
|
1116
|
+
if (fieldName) {
|
|
1117
|
+
return group[fieldName];
|
|
1118
|
+
}
|
|
1119
|
+
return group;
|
|
1120
|
+
}
|
|
1121
|
+
|
|
1112
1122
|
function getErrors(fieldName) {
|
|
1113
1123
|
return getFailures('errors', fieldName);
|
|
1114
1124
|
}
|
|
@@ -1123,25 +1133,16 @@
|
|
|
1123
1133
|
var failureMessages = collectFailureMessages(severityKey, testObjects, {
|
|
1124
1134
|
fieldName: fieldName
|
|
1125
1135
|
});
|
|
1126
|
-
|
|
1127
|
-
return failureMessages[fieldName];
|
|
1128
|
-
}
|
|
1129
|
-
return failureMessages;
|
|
1136
|
+
return getFailuresArrayOrObject(failureMessages, fieldName);
|
|
1130
1137
|
}
|
|
1131
1138
|
|
|
1132
1139
|
function getErrorsByGroup(groupName, fieldName) {
|
|
1133
1140
|
var errors = getByGroup('errors', groupName, fieldName);
|
|
1134
|
-
|
|
1135
|
-
return errors[fieldName];
|
|
1136
|
-
}
|
|
1137
|
-
return errors;
|
|
1141
|
+
return getFailuresArrayOrObject(errors, fieldName);
|
|
1138
1142
|
}
|
|
1139
1143
|
function getWarningsByGroup(groupName, fieldName) {
|
|
1140
|
-
var
|
|
1141
|
-
|
|
1142
|
-
return errors[fieldName];
|
|
1143
|
-
}
|
|
1144
|
-
return errors;
|
|
1144
|
+
var warnings = getByGroup('warnings', groupName, fieldName);
|
|
1145
|
+
return getFailuresArrayOrObject(warnings, fieldName);
|
|
1145
1146
|
}
|
|
1146
1147
|
/**
|
|
1147
1148
|
* Gets failure messages by group.
|
|
@@ -1323,22 +1324,90 @@
|
|
|
1323
1324
|
});
|
|
1324
1325
|
}
|
|
1325
1326
|
|
|
1327
|
+
function createBus() {
|
|
1328
|
+
var listeners = {};
|
|
1329
|
+
return {
|
|
1330
|
+
emit: function (event, data) {
|
|
1331
|
+
if (!listeners[event]) {
|
|
1332
|
+
return;
|
|
1333
|
+
}
|
|
1334
|
+
listeners[event].forEach(function (listener) {
|
|
1335
|
+
listener(data);
|
|
1336
|
+
});
|
|
1337
|
+
},
|
|
1338
|
+
on: function (event, handler) {
|
|
1339
|
+
if (!listeners[event]) {
|
|
1340
|
+
listeners[event] = [];
|
|
1341
|
+
}
|
|
1342
|
+
listeners[event].push(handler);
|
|
1343
|
+
return {
|
|
1344
|
+
off: function () {
|
|
1345
|
+
listeners[event] = listeners[event].filter(function (h) { return h !== handler; });
|
|
1346
|
+
}
|
|
1347
|
+
};
|
|
1348
|
+
}
|
|
1349
|
+
};
|
|
1350
|
+
}
|
|
1351
|
+
|
|
1352
|
+
function callEach(arr) {
|
|
1353
|
+
return arr.forEach(function (fn) { return fn(); });
|
|
1354
|
+
}
|
|
1355
|
+
|
|
1356
|
+
/**
|
|
1357
|
+
* Runs done callback per field when async tests are finished running.
|
|
1358
|
+
*/
|
|
1359
|
+
function runFieldCallbacks(fieldName) {
|
|
1360
|
+
var fieldCallbacks = useTestCallbacks()[0].fieldCallbacks;
|
|
1361
|
+
if (fieldName) {
|
|
1362
|
+
if (!hasRemainingTests(fieldName) &&
|
|
1363
|
+
Array.isArray(fieldCallbacks[fieldName])) {
|
|
1364
|
+
callEach(fieldCallbacks[fieldName]);
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
}
|
|
1368
|
+
/**
|
|
1369
|
+
* Runs unlabelled done callback when async tests are finished running.
|
|
1370
|
+
*/
|
|
1371
|
+
function runDoneCallbacks() {
|
|
1372
|
+
var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
|
|
1373
|
+
if (!hasRemainingTests()) {
|
|
1374
|
+
callEach(doneCallbacks);
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
|
|
1378
|
+
function initBus() {
|
|
1379
|
+
var bus = createBus();
|
|
1380
|
+
bus.on(Events.TEST_COMPLETED, function (testObject) {
|
|
1381
|
+
if (testObject.isCanceled()) {
|
|
1382
|
+
return;
|
|
1383
|
+
}
|
|
1384
|
+
testObject.done();
|
|
1385
|
+
runFieldCallbacks(testObject.fieldName);
|
|
1386
|
+
runDoneCallbacks();
|
|
1387
|
+
});
|
|
1388
|
+
return bus;
|
|
1389
|
+
}
|
|
1390
|
+
function useBus() {
|
|
1391
|
+
var context = ctx.useX();
|
|
1392
|
+
if (!context.bus) {
|
|
1393
|
+
throwError();
|
|
1394
|
+
}
|
|
1395
|
+
return context.bus;
|
|
1396
|
+
}
|
|
1397
|
+
var Events;
|
|
1398
|
+
(function (Events) {
|
|
1399
|
+
Events["TEST_COMPLETED"] = "test_completed";
|
|
1400
|
+
})(Events || (Events = {}));
|
|
1401
|
+
|
|
1326
1402
|
// eslint-disable-next-line max-lines-per-function
|
|
1327
1403
|
function create(suiteCallback) {
|
|
1328
1404
|
if (!isFunction(suiteCallback)) {
|
|
1329
1405
|
throwError('Suite initialization error. Expected `tests` to be a function.');
|
|
1330
1406
|
}
|
|
1331
|
-
var
|
|
1332
|
-
var state = createState(
|
|
1333
|
-
handlers.forEach(function (fn) {
|
|
1334
|
-
return fn({
|
|
1335
|
-
suiteState: stateRef,
|
|
1336
|
-
type: 'suiteStateUpdate'
|
|
1337
|
-
});
|
|
1338
|
-
});
|
|
1339
|
-
});
|
|
1407
|
+
var bus = initBus();
|
|
1408
|
+
var state = createState();
|
|
1340
1409
|
var stateRef = createStateRef(state, { suiteId: genId() });
|
|
1341
|
-
var suite = assign(ctx.bind({ stateRef: stateRef }, function () {
|
|
1410
|
+
var suite = assign(ctx.bind({ stateRef: stateRef, bus: bus }, function () {
|
|
1342
1411
|
var args = [];
|
|
1343
1412
|
for (var _i = 0; _i < arguments.length; _i++) {
|
|
1344
1413
|
args[_i] = arguments[_i];
|
|
@@ -1362,16 +1431,7 @@
|
|
|
1362
1431
|
}
|
|
1363
1432
|
});
|
|
1364
1433
|
}),
|
|
1365
|
-
reset: state.reset
|
|
1366
|
-
subscribe: function (handler) {
|
|
1367
|
-
if (!isFunction(handler))
|
|
1368
|
-
return;
|
|
1369
|
-
handlers.push(handler);
|
|
1370
|
-
handler({
|
|
1371
|
-
type: 'suiteSubscribeInit',
|
|
1372
|
-
suiteState: stateRef
|
|
1373
|
-
});
|
|
1374
|
-
}
|
|
1434
|
+
reset: state.reset
|
|
1375
1435
|
});
|
|
1376
1436
|
return suite;
|
|
1377
1437
|
}
|
|
@@ -1503,16 +1563,16 @@
|
|
|
1503
1563
|
*/
|
|
1504
1564
|
function group(groupName, tests) {
|
|
1505
1565
|
if (!isStringValue(groupName)) {
|
|
1506
|
-
throwGroupError(
|
|
1566
|
+
throwGroupError('name must be a string');
|
|
1507
1567
|
}
|
|
1508
1568
|
if (!isFunction(tests)) {
|
|
1509
|
-
throwGroupError(
|
|
1569
|
+
throwGroupError('callback must be a function');
|
|
1510
1570
|
}
|
|
1511
1571
|
// Running with the context applied
|
|
1512
|
-
ctx.
|
|
1572
|
+
ctx.run({ groupName: groupName }, tests);
|
|
1513
1573
|
}
|
|
1514
|
-
function throwGroupError(
|
|
1515
|
-
throwError("
|
|
1574
|
+
function throwGroupError(error) {
|
|
1575
|
+
throwError("Wrong arguments passed to group. Group " + error + ".");
|
|
1516
1576
|
}
|
|
1517
1577
|
|
|
1518
1578
|
function optional(optionals) {
|
|
@@ -1549,6 +1609,7 @@
|
|
|
1549
1609
|
}
|
|
1550
1610
|
|
|
1551
1611
|
function shouldUseErrorAsMessage(message, error) {
|
|
1612
|
+
// kind of cheating with this safe guard, but it does the job
|
|
1552
1613
|
return isUndefined(message) && isStringValue(error);
|
|
1553
1614
|
}
|
|
1554
1615
|
|
|
@@ -1623,6 +1684,9 @@
|
|
|
1623
1684
|
VestTest.prototype.isTested = function () {
|
|
1624
1685
|
return this.hasFailures() || this.isPassing();
|
|
1625
1686
|
};
|
|
1687
|
+
VestTest.prototype.isUntested = function () {
|
|
1688
|
+
return this.status === STATUS_UNTESTED;
|
|
1689
|
+
};
|
|
1626
1690
|
VestTest.prototype.isFailing = function () {
|
|
1627
1691
|
return this.status === STATUS_FAILED;
|
|
1628
1692
|
};
|
|
@@ -1648,27 +1712,23 @@
|
|
|
1648
1712
|
var STATUS_PENDING = 'PENDING';
|
|
1649
1713
|
var STATUS_CANCELED = 'CANCELED';
|
|
1650
1714
|
|
|
1715
|
+
function isPromise(value) {
|
|
1716
|
+
return value && isFunction(value.then);
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1651
1719
|
function isSameProfileTest(testObject1, testObject2) {
|
|
1652
1720
|
return (testObject1.fieldName === testObject2.fieldName &&
|
|
1653
1721
|
testObject1.groupName === testObject2.groupName);
|
|
1654
1722
|
}
|
|
1655
1723
|
|
|
1656
1724
|
function cancelOverriddenPendingTest(prevRunTestObject, currentRunTestObject) {
|
|
1657
|
-
if (
|
|
1658
|
-
prevRunTestObject
|
|
1659
|
-
|
|
1725
|
+
if (currentRunTestObject !== prevRunTestObject &&
|
|
1726
|
+
isSameProfileTest(prevRunTestObject, currentRunTestObject) &&
|
|
1727
|
+
prevRunTestObject.isPending()) {
|
|
1660
1728
|
prevRunTestObject.cancel();
|
|
1661
1729
|
}
|
|
1662
1730
|
}
|
|
1663
1731
|
|
|
1664
|
-
function isPromise(value) {
|
|
1665
|
-
return value && isFunction(value.then);
|
|
1666
|
-
}
|
|
1667
|
-
|
|
1668
|
-
function callEach(arr) {
|
|
1669
|
-
return arr.forEach(function (fn) { return fn(); });
|
|
1670
|
-
}
|
|
1671
|
-
|
|
1672
1732
|
/**
|
|
1673
1733
|
* Runs async test.
|
|
1674
1734
|
*/
|
|
@@ -1676,16 +1736,10 @@
|
|
|
1676
1736
|
var asyncTest = testObject.asyncTest, message = testObject.message;
|
|
1677
1737
|
if (!isPromise(asyncTest))
|
|
1678
1738
|
return;
|
|
1739
|
+
var emit = useBus().emit;
|
|
1679
1740
|
var stateRef = useStateRef();
|
|
1680
1741
|
var done = ctx.bind({ stateRef: stateRef }, function () {
|
|
1681
|
-
testObject
|
|
1682
|
-
// This is for cases in which the suite state was already reset
|
|
1683
|
-
if (testObject.isCanceled()) {
|
|
1684
|
-
return;
|
|
1685
|
-
}
|
|
1686
|
-
// Perform required done callback calls and cleanups after the test is finished
|
|
1687
|
-
runFieldCallbacks(testObject.fieldName);
|
|
1688
|
-
runDoneCallbacks();
|
|
1742
|
+
emit(Events.TEST_COMPLETED, testObject);
|
|
1689
1743
|
});
|
|
1690
1744
|
var fail = ctx.bind({ stateRef: stateRef }, function (rejectionMessage) {
|
|
1691
1745
|
if (testObject.isCanceled()) {
|
|
@@ -1706,27 +1760,6 @@
|
|
|
1706
1760
|
fail();
|
|
1707
1761
|
}
|
|
1708
1762
|
}
|
|
1709
|
-
/**
|
|
1710
|
-
* Runs done callback per field when async tests are finished running.
|
|
1711
|
-
*/
|
|
1712
|
-
function runFieldCallbacks(fieldName) {
|
|
1713
|
-
var fieldCallbacks = useTestCallbacks()[0].fieldCallbacks;
|
|
1714
|
-
if (fieldName) {
|
|
1715
|
-
if (!hasRemainingTests(fieldName) &&
|
|
1716
|
-
Array.isArray(fieldCallbacks[fieldName])) {
|
|
1717
|
-
callEach(fieldCallbacks[fieldName]);
|
|
1718
|
-
}
|
|
1719
|
-
}
|
|
1720
|
-
}
|
|
1721
|
-
/**
|
|
1722
|
-
* Runs unlabelled done callback when async tests are finished running.
|
|
1723
|
-
*/
|
|
1724
|
-
function runDoneCallbacks() {
|
|
1725
|
-
var doneCallbacks = useTestCallbacks()[0].doneCallbacks;
|
|
1726
|
-
if (!hasRemainingTests()) {
|
|
1727
|
-
callEach(doneCallbacks);
|
|
1728
|
-
}
|
|
1729
|
-
}
|
|
1730
1763
|
|
|
1731
1764
|
/**
|
|
1732
1765
|
* Runs sync tests - or extracts promise.
|
|
@@ -1754,6 +1787,7 @@
|
|
|
1754
1787
|
* Registers test, if async - adds to pending array
|
|
1755
1788
|
*/
|
|
1756
1789
|
function registerTest(testObject) {
|
|
1790
|
+
var emit = useBus().emit;
|
|
1757
1791
|
// Run test callback.
|
|
1758
1792
|
// If a promise is returned, set as async and
|
|
1759
1793
|
// Move to pending list.
|
|
@@ -1767,7 +1801,7 @@
|
|
|
1767
1801
|
runAsyncTest(testObject);
|
|
1768
1802
|
}
|
|
1769
1803
|
else {
|
|
1770
|
-
testObject
|
|
1804
|
+
emit(Events.TEST_COMPLETED, testObject);
|
|
1771
1805
|
}
|
|
1772
1806
|
}
|
|
1773
1807
|
catch (_a) {
|
|
@@ -1775,6 +1809,29 @@
|
|
|
1775
1809
|
}
|
|
1776
1810
|
}
|
|
1777
1811
|
|
|
1812
|
+
function registerPrevRunTest(testObject) {
|
|
1813
|
+
var prevRunTest = useTestAtCursor(testObject);
|
|
1814
|
+
if (isExcluded(testObject)) {
|
|
1815
|
+
testObject.skip();
|
|
1816
|
+
useSetNextCursorAt();
|
|
1817
|
+
return prevRunTest;
|
|
1818
|
+
}
|
|
1819
|
+
cancelOverriddenPendingTest(prevRunTest, testObject);
|
|
1820
|
+
useSetTestAtCursor(testObject);
|
|
1821
|
+
useSetNextCursorAt();
|
|
1822
|
+
registerTestObjectByTier(testObject);
|
|
1823
|
+
return testObject;
|
|
1824
|
+
}
|
|
1825
|
+
function registerTestObjectByTier(testObject) {
|
|
1826
|
+
if (testObject.isUntested()) {
|
|
1827
|
+
registerTest(testObject);
|
|
1828
|
+
}
|
|
1829
|
+
else if (isPromise(testObject.asyncTest)) {
|
|
1830
|
+
testObject.setPending();
|
|
1831
|
+
runAsyncTest(testObject);
|
|
1832
|
+
}
|
|
1833
|
+
}
|
|
1834
|
+
|
|
1778
1835
|
function bindTestEach(test) {
|
|
1779
1836
|
/**
|
|
1780
1837
|
* Run multiple tests using a parameter table
|
|
@@ -1791,7 +1848,7 @@
|
|
|
1791
1848
|
var _a = args.reverse(), testFn = _a[0], message = _a[1];
|
|
1792
1849
|
return table.map(function (item) {
|
|
1793
1850
|
item = asArray(item);
|
|
1794
|
-
return test(optionalFunctionValue.apply(void 0, __spreadArray([fieldName], item)), optionalFunctionValue.apply(void 0, __spreadArray([message], item)), function () { return testFn.apply(void 0, item); });
|
|
1851
|
+
return test(optionalFunctionValue.apply(void 0, __spreadArray([fieldName], item, false)), optionalFunctionValue.apply(void 0, __spreadArray([message], item, false)), function () { return testFn.apply(void 0, item); });
|
|
1795
1852
|
});
|
|
1796
1853
|
}
|
|
1797
1854
|
return eachReturn;
|
|
@@ -1814,32 +1871,20 @@
|
|
|
1814
1871
|
// Implicit dependency for more specificity
|
|
1815
1872
|
var dependencies = [suiteId, fieldName, cursorAt].concat(deps);
|
|
1816
1873
|
var cached = cache.get(dependencies);
|
|
1817
|
-
// Cache miss. Start fresh
|
|
1818
1874
|
if (isNull(cached)) {
|
|
1875
|
+
// cache miss
|
|
1819
1876
|
return cache(dependencies, function () { return test(fieldName, msg, testFn); });
|
|
1820
1877
|
}
|
|
1821
|
-
|
|
1822
|
-
|
|
1823
|
-
|
|
1824
|
-
|
|
1825
|
-
return prevRunTest;
|
|
1878
|
+
if (cached[1].isCanceled()) {
|
|
1879
|
+
// cache hit, but test is canceled
|
|
1880
|
+
cache.invalidate(dependencies);
|
|
1881
|
+
return cache(dependencies, function () { return test(fieldName, msg, testFn); });
|
|
1826
1882
|
}
|
|
1827
|
-
|
|
1828
|
-
useSetTestAtCursor(testObject);
|
|
1829
|
-
useSetNextCursorAt();
|
|
1830
|
-
handleAsyncTest(testObject);
|
|
1831
|
-
return testObject;
|
|
1883
|
+
return registerPrevRunTest(cached[1]);
|
|
1832
1884
|
}
|
|
1833
1885
|
return memo;
|
|
1834
1886
|
}
|
|
1835
|
-
function handleAsyncTest(testObject) {
|
|
1836
|
-
if (testObject && isPromise(testObject.asyncTest)) {
|
|
1837
|
-
testObject.setPending();
|
|
1838
|
-
runAsyncTest(testObject);
|
|
1839
|
-
}
|
|
1840
|
-
}
|
|
1841
1887
|
|
|
1842
|
-
// eslint-disable-next-line max-statements
|
|
1843
1888
|
function testBase(fieldName) {
|
|
1844
1889
|
var args = [];
|
|
1845
1890
|
for (var _i = 1; _i < arguments.length; _i++) {
|
|
@@ -1851,26 +1896,14 @@
|
|
|
1851
1896
|
message: message,
|
|
1852
1897
|
groupName: context === null || context === void 0 ? void 0 : context.groupName
|
|
1853
1898
|
});
|
|
1854
|
-
|
|
1855
|
-
if (isExcluded(testObject)) {
|
|
1856
|
-
testObject.skip();
|
|
1857
|
-
useSetNextCursorAt();
|
|
1858
|
-
return prevRunTest;
|
|
1859
|
-
}
|
|
1860
|
-
cancelOverriddenPendingTest(prevRunTest, testObject);
|
|
1861
|
-
useSetTestAtCursor(testObject);
|
|
1862
|
-
useSetNextCursorAt(); // maybe somehow do this only in one place?
|
|
1863
|
-
if (!isFunction(testFn))
|
|
1864
|
-
return testObject;
|
|
1865
|
-
registerTest(testObject);
|
|
1866
|
-
return testObject;
|
|
1899
|
+
return registerPrevRunTest(testObject);
|
|
1867
1900
|
}
|
|
1868
1901
|
var test = assign(testBase, {
|
|
1869
1902
|
each: bindTestEach(testBase),
|
|
1870
1903
|
memo: bindTestMemo(testBase)
|
|
1871
1904
|
});
|
|
1872
1905
|
|
|
1873
|
-
var VERSION = "
|
|
1906
|
+
var VERSION = "4.0.0-dev-deabb8";
|
|
1874
1907
|
|
|
1875
1908
|
exports.VERSION = VERSION;
|
|
1876
1909
|
exports.create = create;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}function r(n){return"function"==typeof n}function e(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function u(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return r(n)?n.apply(void 0,t):n}function i(n,t){var r;return null!==(r=u(n))&&void 0!==r?r:t}function o(n,t){return n={pass:n},t&&(n.message=t),n}function s(n,t){try{return n.run(t)}catch(n){return o(!1)}}function a(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function c(n,t){return n.length===Number(t)}function f(n,t){return n.length>Number(t)}function l(n){return null===n}function p(n){return void 0===n}function g(n){return String(n)===n}function d(n,t){return g(n)&&g(t)&&n.endsWith(t)}function v(n,t){return n===t}function h(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function y(n,t){return h(n)&&h(t)&&Number(n)>Number(t)}function m(n,t){return h(n)&&h(t)&&Number(n)>=Number(t)}function b(n,t){return!!(Array.isArray(t)||g(t)&&g(n))&&-1!==t.indexOf(n)}function N(n){return!!Array.isArray(n)}function C(n,t){return h(n)&&h(t)&&Number(n)<=Number(t)}function O(n,t,r){return m(n,t)&&C(n,r)}function E(n){return!!n===n}function w(n){return"number"==typeof n}function S(n){if(n){if(w(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return c(n,0);if("object"==typeof n)return c(Object.keys(n),0)}return!0}function x(n){return Number.isNaN(n)}function k(n){return!!h(n)&&0>Number(n)}function T(n){return!!n}function P(n,t){return h(n)&&h(t)&&Number(n)<Number(t)}function j(n,t){return t instanceof RegExp?t.test(n):!!g(t)&&new RegExp(t).test(n)}function F(n,t){return h(n)&&h(t)&&Number(n)===Number(t)}function A(n,t){return g(n)&&g(t)&&n.startsWith(t)}function W(n,t){throw Error(i(t,n))}function I(n){function t(t,u){var i,o,s=r();return t=Rn({},s||{},null!==(i=null==n?void 0:n(t,s))&&void 0!==i?i:t),i=e.ctx=Object.freeze(t),e.ancestry.unshift(i),u=u(i),e.ancestry.shift(),e.ctx=null!==(o=e.ancestry[0])&&void 0!==o?o:null,u}function r(){return e.ctx}var e={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:r,useX:function(n){var t;return null!==(t=e.ctx)&&void 0!==t?t:W(i(n,"Context was used after it was closed"))}}}function R(){return null}function q(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=tt.run({value:e,set:!0,meta:{key:r}},(function(){return s(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return o(!0)}function B(n){for(var t in rt){var e=rt[t];r(e)&&n(t,e)}}function G(){return"function"==typeof Proxy}function K(n,r,e){for(var i=[],s=3;s<arguments.length;s++)i[s-3]=arguments[s];return E(n)||n&&E(n.pass)||W("Incorrect return value for rule: "+JSON.stringify(n)),E(n)?o(n):o(n.pass,u.apply(void 0,t([n.message,r,e],i)))}function X(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=K.apply(void 0,t([tt.run({value:n},(function(){return e.apply(void 0,t([n],i))})),u,n],i))).pass){if(!S(o.message))throw o.message;W("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!G())return B((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=rt[t])return r(u,n,t)}});return u}function D(n){var r,s=[];return function n(a){return function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l=rt[a];s.push((function(n){return K.apply(void 0,t([l.apply(void 0,t([n],c)),a,n],c))}));var p={run:function(n){return i(e(s,(function(t,e){var i,s=tt.run({value:n},(function(){return t(n)}));s.pass||e(o(!!s.pass,null!==(i=u(r,n,s.message))&&void 0!==i?i:s.message))})),o(!0))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return G()?p=new Proxy(p,{get:function(t,r){return rt[r]?n(r):t[r]}}):(B((function(t){p[t]=n(t)})),p)}}(n)}function U(n){var t,r={};for(t in n)r[t]=et.optional(n[t]);return r}function z(n,t){return!(!t||n.fieldName!==t)}function J(n){void 0===n&&(n=10);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),t.length>n&&(t.length=n),u)};return r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function L(){return it.useX().stateRef}function M(){return L().testObjects()}function V(n){var t=L().testObjectsCursor()[0];return _(n=i(L().prevTestObjects()[0][t],n)),n}function _(n){var t=L().testObjectsCursor()[0],r=M();n!==r[0][t]&&(0,r[1])((function(r){return(r=r.slice(0))[t]=n,r}))}function Y(){(0,L().testObjectsCursor()[1])((function(n){return n+1}))}function H(n){return!!L().optionalFields()[0][n]}function Q(){return M()[0].filter((function(n){return n.isPending()}))}function Z(n){var t=Q();return!S(t)&&(n?t.some((function(t){return z(t,n)})):Vn(t))}function $(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function nn(n,t,r){var e;void 0===r&&(r={});var u=(r=r||{}).group,i=r.fieldName;return t.reduce((function(t,r){return u&&r.groupName!==u||i&&!z(r,i)||"warnings"===n!=!!r.warns||!r.hasFailures()||(t[r.fieldName]=(t[r.fieldName]||[]).concat(r.message||[])),t}),In({},i&&((e={})[i]=[],e)))}function tn(n){return en("errors",n)}function rn(n){return en("warnings",n)}function en(n,t){return n=nn(n,M()[0],{fieldName:t}),t?n[t]:n}function un(n,t){return n=sn("errors",n,t),t?n[t]:n}function on(n,t){return n=sn("warnings",n,t),t?n[t]:n}function sn(n,t,r){return t||W("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),nn(n,M()[0],{group:t,fieldName:r})}function an(n,t,r){return!(!n.hasFailures()||r&&!z(n,r)||"warnings"===t!=!!n.warns)}function cn(n){return ln("errors",n)}function fn(n){return ln("warnings",n)}function ln(n,t){return M()[0].some((function(r){return an(r,n,t)}))}function pn(n,t){return dn("errors",n,t)}function gn(n,t){return dn("warnings",n,t)}function dn(n,t,r){return M()[0].some((function(e){return t===e.groupName&&an(e,n,r)}))}function vn(n,t){return!n.hasErrors(t)&&(!(S(M()[0])||t&&S(n.tests[t])||Vn(Q().filter((function(n){return!(t&&!z(n,t))&&!H(n.fieldName)}))))&&function(n){return M()[0].every((function(t){return!!(n&&!z(t,n)||H(t.fieldName))||t.isTested()}))}(t))}function hn(){var n=M()[0],t={stateRef:L()};return ot([n],it.bind(t,(function(){return Rn(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return M()[0].forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=$(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=$(n.groups[e],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:it.bind(t,tn),getErrorsByGroup:it.bind(t,un),getWarnings:it.bind(t,rn),getWarningsByGroup:it.bind(t,on),hasErrors:it.bind(t,cn),hasErrorsByGroup:it.bind(t,pn),hasWarnings:it.bind(t,fn),hasWarningsByGroup:it.bind(t,gn),isValid:it.bind(t,(function(n){return vn(hn(),n)}))})})))}function yn(){var n=M()[0],t={stateRef:L()};return st([n],it.bind(t,(function(){return Rn({},hn(),{done:it.bind(t,at)})})))}function mn(n,t,e){return!(r(n)&&(!t||e.tests[t]&&0!==e.tests[t].testCount))}function bn(n){return!(Z()&&(!n||Z(n)))}function Nn(n,t){var r=it.bind({},n);(0,L().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Cn(n){return wn("only","tests",n)}function On(n){return wn("skip","tests",n)}function En(n){var t=n.fieldName;n=n.groupName;var r=it.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){n:{var i=it.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(i,n))var o=!1===i[n];else{for(o in i)if(!0===i[o]){o=!0;break n}o=!1}}if(o)return!0;if(!0===r.groups[n])return!u&&(!!Sn(e)||!1===e[t])}return!u&&Sn(e)}function wn(n,t,r){var e=it.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){g(r)&&(e.exclusion[t][r]="only"===n)}))}function Sn(n){for(var t in n)if(!0===n[t])return!0;return!1}function xn(n){W('group initialization error. Expected "'+n+'" to be a string.',"group name must be a string")}function kn(n,t){n.fieldName===t.fieldName&&n.groupName===t.groupName&&n.isPending()&&t!==n&&n.cancel()}function Tn(n){return n.forEach((function(n){return n()}))}function Pn(n){var t=n.asyncTest,e=n.message;if(t&&r(t.then)){var u=L(),i=it.bind({stateRef:u},(function(){if(n.done(),!n.isCanceled()){var t=n.fieldName,r=L().testCallbacks()[0].fieldCallbacks;t&&!Z(t)&&Array.isArray(r[t])&&Tn(r[t]),t=L().testCallbacks()[0].doneCallbacks,Z()||Tn(t)}}));u=it.bind({stateRef:u},(function(t){n.isCanceled()||(n.message=g(t)?t:e,n.fail(),(0,M()[1])((function(n){return n.slice(0)})),i())}));try{t.then(i,u)}catch(n){u()}}}function jn(n){return it.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,p(n.message)&&g(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}function Fn(n){var t;(t=n)&&(t=(t=n.asyncTest)&&r(t.then)),t&&(n.setPending(),Pn(n))}function An(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];e=t.reverse(),t=e[0],e=e[1];var u=it.useX();if(u=V(e=new ct(n,t,{message:e,groupName:null==u?void 0:u.groupName})),En(e))return e.skip(),Y(),u;if(kn(u,e),_(e),Y(),!r(t))return e;t=jn(e);try{t&&r(t.then)?(e.asyncTest=t,e.setPending(),Pn(e)):e.done()}catch(n){W("Your test function "+e.fieldName+" returned "+JSON.stringify(t)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}return e}var Wn,In=function(){return(In=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n}).apply(this,arguments)},Rn=Object.assign,qn=a(c),Bn=a(l),Gn=a(p),Kn=a(d),Xn=a(v),Dn=a(h),Un=a(b),zn=a(N),Jn=a(O),Ln=a(E),Mn=a(w),Vn=a(S),_n=a(x),Yn=a(k),Hn=a(g),Qn=a(T),Zn=a(j),$n=a(F),nt=a(A),tt=I((function(n,t){var r={value:n.value,meta:n.meta||{}};return t?n.set?Rn(r,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:Rn(r,{parent:R})})),rt=Rn({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:Kn,doesNotStartWith:nt,endsWith:d,equals:v,greaterThan:y,greaterThanOrEquals:m,gt:y,gte:m,inside:b,isArray:N,isBetween:O,isBoolean:E,isEmpty:S,isEven:function(n){return!!h(n)&&0==n%2},isFalsy:Qn,isNaN:x,isNegative:k,isNotArray:zn,isNotBetween:Jn,isNotBoolean:Ln,isNotEmpty:Vn,isNotNaN:_n,isNotNull:Bn,isNotNumber:Mn,isNotNumeric:Dn,isNotString:Hn,isNotUndefined:Gn,isNull:l,isNumber:w,isNumeric:h,isOdd:function(n){return!!h(n)&&0!=n%2},isPositive:Yn,isString:g,isTruthy:T,isUndefined:p,lengthEquals:c,lengthNotEquals:qn,lessThan:P,lessThanOrEquals:C,longerThan:f,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:P,lte:C,matches:j,notEquals:Xn,notInside:Un,notMatches:Zn,numberEquals:F,numberNotEquals:$n,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:A},{allOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass||r(t)})),o(!0))},anyOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass&&r(t)})),o(!1))},noneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){s(t,n).pass&&r(o(!1))})),o(!0))},oneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(f(e,1))return!1;(t=s(t,n)).pass&&e.push(t)})),o(c(e,1))},optional:function(n,t){return p(n)||null===n?o(!0):s(t,n)}},{shape:function(n,t){var r=q(n,t);if(!r.pass)return r;for(var e in n)if(!Object.prototype.hasOwnProperty.call(t,e))return o(!1);return o(!0)},loose:q,isArrayOf:function(n,t){return i(e(n,(function(n,r,e){(e=tt.run({value:n,set:!0,meta:{index:e}},(function(){return s(t,n)}))).pass||r(e)})),o(!0))}}),et=(Wn=In({context:function(){return tt.useX()},extend:function(n){Rn(rt,n)}},{partial:U}),G()?new Proxy(Rn(X,Wn),{get:function(n,t){return t in n?n[t]:rt[t]?D(t):void 0}}):(B((function(n){Wn[n]=D(n)})),Wn)),ut=function(n){return function(){return""+n++}}(0),it=I((function(n,t){return t?null:Rn({},{exclusion:{tests:{},groups:{}}},n)})),ot=J(20),st=J(20),at=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=yn(),mn(r,n,t))return t;var e=function(){return r(hn())};return bn(n)?(e(),t):(Nn(e,n),t)};Cn.group=function(n){return wn("only","groups",n)},On.group=function(n){return wn("skip","groups",n)};var ct=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=ut(),this.warns=!1,this.status=ft,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,p(this.message)&&g(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isCanceled()||(this.status=n)},n.prototype.setPending=function(){this.setStatus(vt)},n.prototype.fail=function(){this.setStatus(this.warns?gt:pt)},n.prototype.done=function(){this.isWarning()||this.isCanceled()||this.isFailing()||this.setStatus(dt)},n.prototype.warn=function(){this.warns=!0},n.prototype.skip=function(){this.setStatus(lt)},n.prototype.cancel=function(){this.setStatus(ht),function(n){(0,M()[1])((function(t){var r=t.indexOf(n);return-1!==r&&t.splice(r,1),[].concat(t)}))}(this)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===vt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isFailing=function(){return this.status===pt},n.prototype.isCanceled=function(){return this.status===ht},n.prototype.isSkipped=function(){return this.status===lt},n.prototype.isPassing=function(){return this.status===dt},n.prototype.isWarning=function(){return this.status===gt},n}(),ft="UNTESTED",lt="SKIPPED",pt="FAILED",gt="WARNING",dt="PASSING",vt="PENDING",ht="CANCELED",yt=Rn(An,{each:function(n){return function(r){return Array.isArray(r)||W("test.each: Expected table to be an array."),function(e){for(var i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];var s=(i=i.reverse())[0],a=i[1];return r.map((function(r){return r=[].concat(r),n(u.apply(void 0,t([e],r)),u.apply(void 0,t([a],r)),(function(){return s.apply(void 0,r)}))}))}}}(An),memo:function(n){var t=J(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=L().suiteId()[0];var i=L().testObjectsCursor()[0],o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),null===(u=t.get(e))?t(e,(function(){return n(r,s,o)})):(u=V(e=u[1]),En(e)?(Y(),u):(kn(u,e),_(e),Y(),Fn(e),e))}}(An)});n.VERSION="3.3.0-dev-549cb1",n.create=function(n){r(n)||W("Suite initialization error. Expected `tests` to be a function.");var t=[],e=function(n){function t(n,t){return i.references.push(),e(n,u(t)),function(){return[i.references[n],function(t){return e(n,u(t,i.references[n]))}]}}function e(t,e){var u=i.references[t];i.references[t]=e,r(t=o[t][1])&&t(e,u),r(n)&&n()}var i={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){i.references=[],o.forEach((function(n,r){return t(r,n[0])}))}}}((function(){t.forEach((function(n){return n({suiteState:i,type:"suiteStateUpdate"})}))})),i=function(n,t){var r=t.suiteId;return{optionalFields:n.registerStateKey((function(){return{}})),prevTestObjects:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return r})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]})),testObjectsCursor:n.registerStateKey((function(){return 0}))}}(e,{suiteId:ut()});return Rn(it.bind({stateRef:i},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var u=M()[0];return r=L().prevTestObjects()[1],e.reset(),r((function(){return u})),n.apply(void 0,t),yn()})),{get:it.bind({stateRef:i},hn),remove:it.bind({stateRef:i},(function(n){var t=M()[0];[].concat(t).forEach((function(t){z(t,n)&&t.cancel()}))})),reset:e.reset,subscribe:function(n){r(n)&&(t.push(n),n({type:"suiteSubscribeInit",suiteState:i}))}})},n.enforce=et,n.group=function(n,t){g(n)||xn(n),r(t)||xn(t),it.bind({groupName:n},t)()},n.only=Cn,n.optional=function(n){(0,L().optionalFields()[1])((function(t){return[].concat(n).forEach((function(n){t[n]=!0})),t}))},n.skip=On,n.skipWhen=function(n,t){it.run({skipped:u(n)},(function(){return t()}))},n.test=yt,n.warn=function(){var n=it.useX("warn hook called outside of a running suite.");n.currentTest||W("warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
|
|
1
|
+
"use strict";!function(n,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((n="undefined"!=typeof globalThis?globalThis:n||self).vest={})}(this,(function(n){function t(n,t,r){if(r||2===arguments.length)for(var e,u=0,i=t.length;u<i;u++)!e&&u in t||(e||(e=Array.prototype.slice.call(t,0,u)),e[u]=t[u]);return n.concat(e||t)}function r(n){return"function"==typeof n}function e(n,t){function r(n){e=!0,u=n}for(var e=!1,u=null,i=0;i<n.length;i++)if(t(n[i],r,i),e)return u}function u(n){for(var t=[],e=1;e<arguments.length;e++)t[e-1]=arguments[e];return r(n)?n.apply(void 0,t):n}function i(n,t){var r;return null!==(r=u(n))&&void 0!==r?r:t}function o(n,t){return n={pass:n},t&&(n.message=t),n}function s(n,t){try{return n.run(t)}catch(n){return o(!1)}}function a(n){return function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];return!n.apply(void 0,t)}}function c(n,t){return n.length===Number(t)}function f(n,t){return n.length>Number(t)}function l(n){return null===n}function p(n){return void 0===n}function d(n){return String(n)===n}function g(n,t){return d(n)&&d(t)&&n.endsWith(t)}function v(n,t){return n===t}function h(n){var t=Number(n);return!(isNaN(parseFloat(String(n)))||isNaN(Number(n))||!isFinite(t))}function y(n,t){return h(n)&&h(t)&&Number(n)>Number(t)}function m(n,t){return h(n)&&h(t)&&Number(n)>=Number(t)}function b(n,t){return!!(Array.isArray(t)||d(t)&&d(n))&&-1!==t.indexOf(n)}function N(n){return!!Array.isArray(n)}function E(n,t){return h(n)&&h(t)&&Number(n)<=Number(t)}function C(n,t,r){return m(n,t)&&E(n,r)}function O(n){return!!n===n}function w(n){return"number"==typeof n}function T(n){if(n){if(w(n))return 0===n;if(Object.prototype.hasOwnProperty.call(n,"length"))return c(n,0);if("object"==typeof n)return c(Object.keys(n),0)}return!0}function S(n){return Number.isNaN(n)}function x(n){return!!h(n)&&0>Number(n)}function k(n){return!!n}function P(n,t){return h(n)&&h(t)&&Number(n)<Number(t)}function j(n,t){return t instanceof RegExp?t.test(n):!!d(t)&&new RegExp(t).test(n)}function F(n,t){return h(n)&&h(t)&&Number(n)===Number(t)}function W(n,t){return d(n)&&d(t)&&n.startsWith(t)}function A(n,t){throw Error(i(t,n))}function I(n){function t(t,u){var i,o,s=r();return t=An({},s||{},null!==(i=null==n?void 0:n(t,s))&&void 0!==i?i:t),i=e.ctx=Object.freeze(t),e.ancestry.unshift(i),u=u(i),e.ancestry.shift(),e.ctx=null!==(o=e.ancestry[0])&&void 0!==o?o:null,u}function r(){return e.ctx}var e={ancestry:[]};return{bind:function(n,r){return function(){for(var e=[],u=0;u<arguments.length;u++)e[u]=arguments[u];return t(n,(function(){return r.apply(void 0,e)}))}},run:t,use:r,useX:function(n){var t;return null!==(t=e.ctx)&&void 0!==t?t:A(i(n,"Context was used after it was closed"))}}}function R(){return null}function q(n,t){var r,e=function(r){var e=n[r],u=t[r];if(!(r=$n.run({value:e,set:!0,meta:{key:r}},(function(){return s(u,e)}))).pass)return{value:r}};for(r in t){var u=e(r);if("object"==typeof u)return u.value}return o(!0)}function B(n){for(var t in nt){var e=nt[t];r(e)&&n(t,e)}}function D(){return"function"==typeof Proxy}function G(n,r,e){for(var i=[],s=3;s<arguments.length;s++)i[s-3]=arguments[s];return O(n)||n&&O(n.pass)||A("Incorrect return value for rule: "+JSON.stringify(n)),O(n)?o(n):o(n.pass,u.apply(void 0,t([n.message,r,e],i,!1)))}function X(n){function r(r,e,u){return function(){for(var i=[],o=0;o<arguments.length;o++)i[o]=arguments[o];if(!(o=G.apply(void 0,t([$n.run({value:n},(function(){return e.apply(void 0,t([n],i,!1))})),u,n],i,!1))).pass){if(!T(o.message))throw o.message;A("enforce/"+u+" failed with "+JSON.stringify(n))}return r}}var e={};if(!D())return B((function(n,t){e[n]=r(e,t,n)})),e;var u=new Proxy(e,{get:function(n,t){if(n=nt[t])return r(u,n,t)}});return u}function K(n){var r,s=[];return function n(a){return function(){for(var c=[],f=0;f<arguments.length;f++)c[f]=arguments[f];var l=nt[a];s.push((function(n){return G.apply(void 0,t([l.apply(void 0,t([n],c,!1)),a,n],c,!1))}));var p={run:function(n){return i(e(s,(function(t,e){var i,s=$n.run({value:n},(function(){return t(n)}));s.pass||e(o(!!s.pass,null!==(i=u(r,n,s.message))&&void 0!==i?i:s.message))})),o(!0))},test:function(n){return p.run(n).pass},message:function(n){return n&&(r=n),p}};return D()?p=new Proxy(p,{get:function(t,r){return nt[r]?n(r):t[r]}}):(B((function(t){p[t]=n(t)})),p)}}(n)}function _(n){var t,r={};for(t in n)r[t]=tt.optional(n[t]);return r}function L(n,t){return!(!t||n.fieldName!==t)}function M(n){void 0===n&&(n=10);var t=[],r=function(e,u){var i=r.get(e);return i?i[1]:(u=u(),t.unshift([e.concat(),u]),t.length>n&&(t.length=n),u)};return r.invalidate=function(n){var r=t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}));-1<r&&t.splice(r,1)},r.get=function(n){return t[t.findIndex((function(t){var r=t[0];return c(n,r.length)&&n.every((function(n,t){return n===r[t]}))}))]||null},r}function U(){return et.useX().stateRef}function J(){return U().testObjects()}function z(n){var t=U().testObjectsCursor()[0],r=J();n!==r[0][t]&&(0,r[1])((function(r){return(r=r.slice(0))[t]=n,r}))}function V(){(0,U().testObjectsCursor()[1])((function(n){return n+1}))}function Y(n){return!!U().optionalFields()[0][n]}function H(){return J()[0].filter((function(n){return n.isPending()}))}function Q(n){var t=H();return!T(t)&&(n?t.some((function(t){return L(t,n)})):Un(t))}function Z(n,t){function r(n,t){i[n]++,u&&(i[t]=(i[t]||[]).concat(u))}var e=t.fieldName,u=t.message;n[e]=n[e]||{errorCount:0,warnCount:0,testCount:0};var i=n[e];return t.isSkipped()||(n[e].testCount++,t.isFailing()?r("errorCount","errors"):t.isWarning()&&r("warnCount","warnings")),i}function $(n,t,r){var e;void 0===r&&(r={});var u=(r=r||{}).group,i=r.fieldName;return t.reduce((function(t,r){return u&&r.groupName!==u||i&&!L(r,i)||"warnings"===n!=!!r.warns||!r.hasFailures()||(t[r.fieldName]=(t[r.fieldName]||[]).concat(r.message||[])),t}),Wn({},i&&((e={})[i]=[],e)))}function nn(n){return rn("errors",n)}function tn(n){return rn("warnings",n)}function rn(n,t){return n=$(n,J()[0],{fieldName:t}),t?n[t]:n}function en(n,t){return n=on("errors",n,t),t?n[t]:n}function un(n,t){return n=on("warnings",n,t),t?n[t]:n}function on(n,t,r){return t||A("get"+n[0].toUpperCase()+n.slice(1)+"ByGroup requires a group name. Received `"+t+"` instead."),$(n,J()[0],{group:t,fieldName:r})}function sn(n,t,r){return!(!n.hasFailures()||r&&!L(n,r)||"warnings"===t!=!!n.warns)}function an(n){return fn("errors",n)}function cn(n){return fn("warnings",n)}function fn(n,t){return J()[0].some((function(r){return sn(r,n,t)}))}function ln(n,t){return dn("errors",n,t)}function pn(n,t){return dn("warnings",n,t)}function dn(n,t,r){return J()[0].some((function(e){return t===e.groupName&&sn(e,n,r)}))}function gn(n,t){return!n.hasErrors(t)&&(!(T(J()[0])||t&&T(n.tests[t])||Un(H().filter((function(n){return!(t&&!L(n,t))&&!Y(n.fieldName)}))))&&function(n){return J()[0].every((function(t){return!!(n&&!L(t,n)||Y(t.fieldName))||t.isTested()}))}(t))}function vn(){var n=J()[0],t={stateRef:U()};return ut([n],et.bind(t,(function(){return An(function(){var n={errorCount:0,groups:{},testCount:0,tests:{},warnCount:0};return J()[0].forEach((function(t){var r=t.fieldName,e=t.groupName;n.tests[r]=Z(n.tests,t),e&&(n.groups[e]=n.groups[e]||{},n.groups[e][r]=Z(n.groups[e],t))})),function(n){for(var t in n.tests)n.errorCount+=n.tests[t].errorCount,n.warnCount+=n.tests[t].warnCount,n.testCount+=n.tests[t].testCount;return n}(n)}(),{getErrors:et.bind(t,nn),getErrorsByGroup:et.bind(t,en),getWarnings:et.bind(t,tn),getWarningsByGroup:et.bind(t,un),hasErrors:et.bind(t,an),hasErrorsByGroup:et.bind(t,ln),hasWarnings:et.bind(t,cn),hasWarningsByGroup:et.bind(t,pn),isValid:et.bind(t,(function(n){return gn(vn(),n)}))})})))}function hn(){var n=J()[0],t={stateRef:U()};return it([n],et.bind(t,(function(){return An({},vn(),{done:et.bind(t,ot)})})))}function yn(n,t,e){return!(r(n)&&(!t||e.tests[t]&&0!==e.tests[t].testCount))}function mn(n){return!(Q()&&(!n||Q(n)))}function bn(n,t){var r=et.bind({},n);(0,U().testCallbacks()[1])((function(n){return t?n.fieldCallbacks[t]=(n.fieldCallbacks[t]||[]).concat(r):n.doneCallbacks.push(r),n}))}function Nn(n){return n.forEach((function(n){return n()}))}function En(){var n=et.useX();return n.bus||A(),n.bus}function Cn(n){return wn("only","tests",n)}function On(n){return wn("skip","tests",n)}function wn(n,t,r){var e=et.useX("hook called outside of a running suite.");r&&[].concat(r).forEach((function(r){d(r)&&(e.exclusion[t][r]="only"===n)}))}function Tn(n){for(var t in n)if(!0===n[t])return!0;return!1}function Sn(n){A("Wrong arguments passed to group. Group "+n+".")}function xn(n){var t=n.asyncTest,e=n.message;if(t&&r(t.then)){var u=En().emit,i=U(),o=et.bind({stateRef:i},(function(){u(jn.TEST_COMPLETED,n)}));i=et.bind({stateRef:i},(function(t){n.isCanceled()||(n.message=d(t)?t:e,n.fail(),(0,J()[1])((function(n){return n.slice(0)})),o())}));try{t.then(o,i)}catch(n){i()}}}function kn(n){var t=U().testObjectsCursor()[0],e=U().prevTestObjects()[0];if(z(t=i(e[t],n)),function(n){var t=n.fieldName;n=n.groupName;var r=et.useX();if(r.skipped)return!0;var e=(r=r.exclusion).tests,u=e[t];if(!1===u)return!0;if(u=!0===u,n){n:{var i=et.useX().exclusion.groups;if(Object.prototype.hasOwnProperty.call(i,n))var o=!1===i[n];else{for(o in i)if(!0===i[o]){o=!0;break n}o=!1}}if(o)return!0;if(!0===r.groups[n])return!(u||!Tn(e)&&!1!==e[t])}return!u&&Tn(e)}(n))return n.skip(),V(),t;if(n!==t&&t.fieldName===n.fieldName&&t.groupName===n.groupName&&t.isPending()&&t.cancel(),z(n),V(),n.isUntested()){t=En().emit,e=function(n){return et.run({currentTest:n},(function(){try{var t=n.testFn()}catch(r){t=r,p(n.message)&&d(t)&&(n.message=r),t=!1}return!1===t&&n.fail(),t}))}(n);try{e&&r(e.then)?(n.asyncTest=e,n.setPending(),xn(n)):t(jn.TEST_COMPLETED,n)}catch(t){A("Your test function "+n.fieldName+" returned "+JSON.stringify(e)+'. Only "false" or a Promise are supported. Return values may cause unexpected behavior.')}}else(t=n.asyncTest)&&r(t.then)&&(n.setPending(),xn(n));return n}function Pn(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];r=t.reverse(),t=r[0],r=r[1];var e=et.useX();return kn(t=new st(n,t,{message:r,groupName:null==e?void 0:e.groupName}))}var jn,Fn,Wn=function(){return Wn=Object.assign||function(n){for(var t,r=1,e=arguments.length;r<e;r++)for(var u in t=arguments[r])Object.prototype.hasOwnProperty.call(t,u)&&(n[u]=t[u]);return n},Wn.apply(this,arguments)},An=Object.assign,In=a(c),Rn=a(l),qn=a(p),Bn=a(g),Dn=a(v),Gn=a(h),Xn=a(b),Kn=a(N),_n=a(C),Ln=a(O),Mn=a(w),Un=a(T),Jn=a(S),zn=a(x),Vn=a(d),Yn=a(k),Hn=a(j),Qn=a(F),Zn=a(W),$n=I((function(n,t){var r={value:n.value,meta:n.meta||{}};return t?n.set?An(r,{parent:function(){return t?{value:t.value,meta:t.meta,parent:t.parent}:t}}):t:An(r,{parent:R})})),nt=An({condition:function(n,t){try{return t(n)}catch(n){return!1}},doesNotEndWith:Bn,doesNotStartWith:Zn,endsWith:g,equals:v,greaterThan:y,greaterThanOrEquals:m,gt:y,gte:m,inside:b,isArray:N,isBetween:C,isBoolean:O,isEmpty:T,isEven:function(n){return!!h(n)&&0==n%2},isFalsy:Yn,isNaN:S,isNegative:x,isNotArray:Kn,isNotBetween:_n,isNotBoolean:Ln,isNotEmpty:Un,isNotNaN:Jn,isNotNull:Rn,isNotNumber:Mn,isNotNumeric:Gn,isNotString:Vn,isNotUndefined:qn,isNull:l,isNumber:w,isNumeric:h,isOdd:function(n){return!!h(n)&&0!=n%2},isPositive:zn,isString:d,isTruthy:k,isUndefined:p,lengthEquals:c,lengthNotEquals:In,lessThan:P,lessThanOrEquals:E,longerThan:f,longerThanOrEquals:function(n,t){return n.length>=Number(t)},lt:P,lte:E,matches:j,notEquals:Dn,notInside:Xn,notMatches:Hn,numberEquals:F,numberNotEquals:Qn,shorterThan:function(n,t){return n.length<Number(t)},shorterThanOrEquals:function(n,t){return n.length<=Number(t)},startsWith:W},{allOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass||r(t)})),o(!0))},anyOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){(t=s(t,n)).pass&&r(t)})),o(!1))},noneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];return i(e(t,(function(t,r){s(t,n).pass&&r(o(!1))})),o(!0))},oneOf:function(n){for(var t=[],r=1;r<arguments.length;r++)t[r-1]=arguments[r];var e=[];return t.some((function(t){if(f(e,1))return!1;(t=s(t,n)).pass&&e.push(t)})),o(c(e,1))},optional:function(n,t){return p(n)||null===n?o(!0):s(t,n)}},{shape:function(n,t){var r=q(n,t);if(!r.pass)return r;for(var e in n)if(!Object.prototype.hasOwnProperty.call(t,e))return o(!1);return o(!0)},loose:q,isArrayOf:function(n,t){return i(e(n,(function(n,r,e){(e=$n.run({value:n,set:!0,meta:{index:e}},(function(){return s(t,n)}))).pass||r(e)})),o(!0))}}),tt=(Fn=Wn({context:function(){return $n.useX()},extend:function(n){An(nt,n)}},{partial:_}),D()?new Proxy(An(X,Fn),{get:function(n,t){return t in n?n[t]:nt[t]?K(t):void 0}}):(B((function(n){Fn[n]=K(n)})),Fn)),rt=function(n){return function(){return""+n++}}(0),et=I((function(n,t){return t?null:An({},{exclusion:{tests:{},groups:{}}},n)})),ut=M(20),it=M(20),ot=function(){for(var n=[],t=0;t<arguments.length;t++)n[t]=arguments[t];var r=(n=n.reverse())[0];if(n=n[1],t=hn(),yn(r,n,t))return t;var e=function(){return r(vn())};return mn(n)?(e(),t):(bn(e,n),t)};(jn||(jn={})).TEST_COMPLETED="test_completed",Cn.group=function(n){return wn("only","groups",n)},On.group=function(n){return wn("skip","groups",n)};var st=function(){function n(n,t,r){var e=void 0===r?{}:r;r=e.message,e=e.groupName,this.id=rt(),this.warns=!1,this.status=at,this.fieldName=n,this.testFn=t,e&&(this.groupName=e),r&&(this.message=r)}return n.prototype.run=function(){try{var n=this.testFn()}catch(t){n=t,p(this.message)&&d(n)&&(this.message=t),n=!1}return!1===n&&this.fail(),n},n.prototype.setStatus=function(n){this.isCanceled()||(this.status=n)},n.prototype.setPending=function(){this.setStatus(dt)},n.prototype.fail=function(){this.setStatus(this.warns?lt:ft)},n.prototype.done=function(){this.isWarning()||this.isCanceled()||this.isFailing()||this.setStatus(pt)},n.prototype.warn=function(){this.warns=!0},n.prototype.skip=function(){this.setStatus(ct)},n.prototype.cancel=function(){this.setStatus(gt),function(n){(0,J()[1])((function(t){var r=t.indexOf(n);return-1!==r&&t.splice(r,1),[].concat(t)}))}(this)},n.prototype.valueOf=function(){return!this.isFailing()},n.prototype.hasFailures=function(){return this.isFailing()||this.isWarning()},n.prototype.isPending=function(){return this.status===dt},n.prototype.isTested=function(){return this.hasFailures()||this.isPassing()},n.prototype.isUntested=function(){return this.status===at},n.prototype.isFailing=function(){return this.status===ft},n.prototype.isCanceled=function(){return this.status===gt},n.prototype.isSkipped=function(){return this.status===ct},n.prototype.isPassing=function(){return this.status===pt},n.prototype.isWarning=function(){return this.status===lt},n}(),at="UNTESTED",ct="SKIPPED",ft="FAILED",lt="WARNING",pt="PASSING",dt="PENDING",gt="CANCELED",vt=An(Pn,{each:function(n){return function(r){return Array.isArray(r)||A("test.each: Expected table to be an array."),function(e){for(var i=[],o=1;o<arguments.length;o++)i[o-1]=arguments[o];var s=(i=i.reverse())[0],a=i[1];return r.map((function(r){return r=[].concat(r),n(u.apply(void 0,t([e],r,!1)),u.apply(void 0,t([a],r,!1)),(function(){return s.apply(void 0,r)}))}))}}}(Pn),memo:function(n){var t=M(100);return function(r){for(var e=[],u=1;u<arguments.length;u++)e[u-1]=arguments[u];u=U().suiteId()[0];var i=U().testObjectsCursor()[0],o=(e=e.reverse())[1],s=e[2];return e=[u,r,i].concat(e[0]),null===(u=t.get(e))?t(e,(function(){return n(r,s,o)})):u[1].isCanceled()?(t.invalidate(e),t(e,(function(){return n(r,s,o)}))):kn(u[1])}}(Pn)});n.VERSION="4.0.0-dev-deabb8",n.create=function(n){r(n)||A("Suite initialization error. Expected `tests` to be a function.");var t=function(){var n=function(){var n={};return{emit:function(t,r){n[t]&&n[t].forEach((function(n){n(r)}))},on:function(t,r){return n[t]||(n[t]=[]),n[t].push(r),{off:function(){n[t]=n[t].filter((function(n){return n!==r}))}}}}}();return n.on(jn.TEST_COMPLETED,(function(n){if(!n.isCanceled()){n.done(),n=n.fieldName;var t=U().testCallbacks()[0].fieldCallbacks;n&&!Q(n)&&Array.isArray(t[n])&&Nn(t[n]),n=U().testCallbacks()[0].doneCallbacks,Q()||Nn(n)}})),n}(),e=function(n){function t(n,t){return i.references.push(),e(n,u(t)),function(){return[i.references[n],function(t){return e(n,u(t,i.references[n]))}]}}function e(t,e){var u=i.references[t];i.references[t]=e,r(t=o[t][1])&&t(e,u),r(n)&&n()}var i={references:[]},o=[];return{registerStateKey:function(n,r){var e=o.length;return o.push([n,r]),t(e,n)},reset:function(){i.references=[],o.forEach((function(n,r){return t(r,n[0])}))}}}(),i=function(n,t){var r=t.suiteId;return{optionalFields:n.registerStateKey((function(){return{}})),prevTestObjects:n.registerStateKey((function(){return[]})),suiteId:n.registerStateKey((function(){return r})),testCallbacks:n.registerStateKey((function(){return{fieldCallbacks:{},doneCallbacks:[]}})),testObjects:n.registerStateKey((function(){return[]})),testObjectsCursor:n.registerStateKey((function(){return 0}))}}(e,{suiteId:rt()});return An(et.bind({stateRef:i,bus:t},(function(){for(var t=[],r=0;r<arguments.length;r++)t[r]=arguments[r];var u=J()[0];return r=U().prevTestObjects()[1],e.reset(),r((function(){return u})),n.apply(void 0,t),hn()})),{get:et.bind({stateRef:i},vn),remove:et.bind({stateRef:i},(function(n){var t=J()[0];[].concat(t).forEach((function(t){L(t,n)&&t.cancel()}))})),reset:e.reset})},n.enforce=tt,n.group=function(n,t){d(n)||Sn("name must be a string"),r(t)||Sn("callback must be a function"),et.run({groupName:n},t)},n.only=Cn,n.optional=function(n){(0,U().optionalFields()[1])((function(t){return[].concat(n).forEach((function(n){t[n]=!0})),t}))},n.skip=On,n.skipWhen=function(n,t){et.run({skipped:u(n)},(function(){return t()}))},n.test=vt,n.warn=function(){var n=et.useX("warn hook called outside of a running suite.");n.currentTest||A("warn called outside of a test."),n.currentTest.warn()},Object.defineProperty(n,"__esModule",{value:!0})}));
|
package/docs/migration.md
CHANGED
|
@@ -42,6 +42,22 @@ import { create } from 'vest';
|
|
|
42
42
|
create(() => {});
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
### Renamed: classNames to classnames
|
|
46
|
+
|
|
47
|
+
Vest 3 included the `vest/classNames` import. It is now renamed to `vest/classnames`.
|
|
48
|
+
|
|
49
|
+
### V3
|
|
50
|
+
|
|
51
|
+
```js
|
|
52
|
+
import classNames from 'vest/classNames';
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### V4
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
import classnames from 'vest/classnames';
|
|
59
|
+
```
|
|
60
|
+
|
|
45
61
|
### Changed: Do not use if/else statements to conditionally run tests
|
|
46
62
|
|
|
47
63
|
Vest version 4 relies on order of execution and remembers the result of each test based on its location in the suite, similar to the way [hooks in react](https://reactjs.org/docs/hooks-rules.html) work. This means that tests wrapped in an if/else statement make Vest go out of sync with the suite order, and unexecuted test results will be recorded. Instead of using if/else statements, you should use the `skipWhen` function that achieves the same result.
|
|
@@ -72,6 +88,9 @@ skipWhen(suite.hasErrors('password'), () => {
|
|
|
72
88
|
// ...
|
|
73
89
|
```
|
|
74
90
|
|
|
91
|
+
**Note**
|
|
92
|
+
If you want to completely omit a test from your suite, and you know that it won't appear at all during the lifetime of your suite, you may use `if/else`.
|
|
93
|
+
|
|
75
94
|
### Removed: enforce.template
|
|
76
95
|
|
|
77
96
|
enforce.template was mostly a shorthand for a "and" style enforcements. In reality it did not provide any substantial functionality that was not achievable without it, while it contributed to confusion regarding the api.
|