Added basic property tests for matchersUtil.equals

* See #1764 from @dubzzz
* Property tests are only run in Node, not browser.
* The Travis build sets JASMINE_LONG_PROPERTY_TESTS to enable much more
  thorough (but slow) testing.
This commit is contained in:
Steve Gravrock
2020-01-04 14:25:25 -08:00
parent 8d53f4d202
commit 4eded6ab61
5 changed files with 73 additions and 1 deletions

View File

@@ -50,3 +50,4 @@ matrix:
if: type != pull_request
addons:
sauce_connect: true
- env: JASMINE_LONG_PROPERTY_TESTS=y

View File

@@ -30,6 +30,7 @@
"ejs": "^2.5.5",
"eslint": "^5.16.0",
"express": "^4.16.4",
"fast-check": "^1.21.0",
"fast-glob": "^2.2.6",
"grunt": "^1.0.4",
"grunt-cli": "^1.3.2",

View File

@@ -0,0 +1,69 @@
describe('matchersUtil -- property tests', function() {
'use strict';
var fc = require('fast-check');
function basicAnythingSettings() {
return {
key: fc.oneof(fc.string(), fc.constantFrom('k1', 'k2', 'k3')),
// Limiting depth & number of keys allows fast-check to try
// a lot more scalar values.
maxDepth: 2,
maxKeys: 5,
withBoxedValues: true,
withMap: true,
withSet: true
};
}
function numRuns() {
var many = 5000000;
// Be thorough but very slow when specified (usually on CI).
if (process.env.JASMINE_LONG_PROPERTY_TESTS) {
console.log(
'Using',
many,
'runs of fc.assert because JASMINE_LONG_PROPERTY_TESTS was set. This may take several minutes.'
);
return many;
} else {
return undefined;
}
}
describe('equals', function() {
it('is symmetric', function() {
fc.assert(
fc.property(
fc.anything(basicAnythingSettings()),
fc.anything(basicAnythingSettings()),
function(a, b) {
return (
jasmineUnderTest.matchersUtil.equals(a, b) ===
jasmineUnderTest.matchersUtil.equals(b, a)
);
}
),
{
numRuns: numRuns(),
examples: [[0, 5e-324]]
}
);
});
it('is reflexive', function() {
var anythingSettings = basicAnythingSettings();
anythingSettings.withMap = false;
fc.assert(
fc.property(fc.dedup(fc.anything(anythingSettings), 2), function(
values
) {
return jasmineUnderTest.matchersUtil.equals(values[0], values[1]);
}),
{
numRuns: numRuns()
}
);
});
});
});

View File

@@ -15,7 +15,7 @@ module.exports = {
'**/*.js'
],
specDir: 'spec',
specFiles: ['**/*[Ss]pec.js', '!npmPackage/**/*'],
specFiles: ['**/*[Ss]pec.js', '!npmPackage/**/*', '!property/**/*'],
helpers: [
'helpers/asyncAwait.js',
'helpers/BrowserFlags.js',

View File

@@ -2,6 +2,7 @@
"spec_dir": "spec",
"spec_files": [
"core/**/*[Ss]pec.js",
"property/**/*[Ss]pec.js",
"npmPackage/**/*[Ss]pec.js"
],
"helpers": [