Compare commits
18 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d06dce4614 | ||
|
|
03098e81f8 | ||
|
|
726c152f6e | ||
|
|
409d2e29e5 | ||
|
|
01e2bd5050 | ||
|
|
96033e38ea | ||
|
|
ed75290ef7 | ||
|
|
a14dbf012a | ||
|
|
17c11ba7b9 | ||
|
|
2a1daca1ca | ||
|
|
f0db5ce350 | ||
|
|
39f9c2e1a0 | ||
|
|
bff612a169 | ||
|
|
4ba42f3746 | ||
|
|
58bee05c36 | ||
|
|
c1871b0f0c | ||
|
|
c16974b091 | ||
|
|
bfedda9764 |
@@ -1,4 +1,5 @@
|
|||||||
Copyright (c) 2008-2019 Pivotal Labs
|
Copyright (c) 2008-2019 Pivotal Labs
|
||||||
|
Copyright (c) 2008-2023 The Jasmine developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
13
README.md
13
README.md
@@ -1,13 +1,10 @@
|
|||||||
<a name="README">[<img src="https://rawgithub.com/jasmine/jasmine/main/images/jasmine-horizontal.svg" width="400px" />](http://jasmine.github.io)</a>
|
<a name="README">[<img src="https://rawgithub.com/jasmine/jasmine/main/images/jasmine-horizontal.svg" width="400px" />](http://jasmine.github.io)</a>
|
||||||
|
|
||||||
[](https://circleci.com/gh/jasmine/jasmine)
|
|
||||||
[](https://www.codetriage.com/jasmine/jasmine)
|
|
||||||
|
|
||||||
# A JavaScript Testing Framework
|
# A JavaScript Testing Framework
|
||||||
|
|
||||||
Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, [Node.js](http://nodejs.org) projects, or anywhere that JavaScript can run.
|
Jasmine is a Behavior Driven Development testing framework for JavaScript. It does not rely on browsers, DOM, or any JavaScript framework. Thus it's suited for websites, [Node.js](http://nodejs.org) projects, or anywhere that JavaScript can run.
|
||||||
|
|
||||||
Upgrading from Jasmine 3.x? Check out the [upgrade guide](https://jasmine.github.io/tutorials/upgrading_to_Jasmine_4.0).
|
Upgrading from Jasmine 4.x? Check out the [upgrade guide](https://jasmine.github.io/tutorials/upgrading_to_Jasmine_5.0).
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
@@ -33,9 +30,9 @@ Microsoft Edge) as well as Node.
|
|||||||
| Environment | Supported versions |
|
| Environment | Supported versions |
|
||||||
|-------------------|---------------------|
|
|-------------------|---------------------|
|
||||||
| Node | 18, 20 |
|
| Node | 18, 20 |
|
||||||
| Safari | 15-16 |
|
| Safari | 15-17 |
|
||||||
| Chrome | Evergreen |
|
| Chrome | Evergreen |
|
||||||
| Firefox | Evergreen, 102 |
|
| Firefox | Evergreen, 102, 115 |
|
||||||
| Edge | Evergreen |
|
| Edge | Evergreen |
|
||||||
|
|
||||||
For evergreen browsers, each version of Jasmine is tested against the version of the browser that is available to us
|
For evergreen browsers, each version of Jasmine is tested against the version of the browser that is available to us
|
||||||
@@ -58,4 +55,6 @@ To find out what environments work with a particular Jasmine release, see the [r
|
|||||||
* [Christian Williams](mailto:antixian666@gmail.com)
|
* [Christian Williams](mailto:antixian666@gmail.com)
|
||||||
* Sheel Choksi
|
* Sheel Choksi
|
||||||
|
|
||||||
Copyright (c) 2008-2022 Jasmine Maintainers. This software is licensed under the [MIT License](https://github.com/jasmine/jasmine/blob/main/MIT.LICENSE).
|
Copyright (c) 2008-2019 Pivotal Labs<br>
|
||||||
|
Copyright (c) 2008-2023 The Jasmine developers<br>
|
||||||
|
This software is licensed under the [MIT License](https://github.com/jasmine/jasmine/blob/main/LICENSE).
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ module.exports = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
files: [
|
files: [
|
||||||
{ src: [ root("MIT.LICENSE") ] },
|
{ src: [ root("LICENSE") ] },
|
||||||
{
|
{
|
||||||
src: [ "jasmine_favicon.png"],
|
src: [ "jasmine_favicon.png"],
|
||||||
dest: standaloneLibDir,
|
dest: standaloneLibDir,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-<%= currentYear %> Pivotal Labs
|
Copyright (c) 2008-2019 Pivotal Labs
|
||||||
|
Copyright (c) 2008-<%= currentYear %> The Jasmine developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2023 Pivotal Labs
|
Copyright (c) 2008-2019 Pivotal Labs
|
||||||
|
Copyright (c) 2008-2024 The Jasmine developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2023 Pivotal Labs
|
Copyright (c) 2008-2019 Pivotal Labs
|
||||||
|
Copyright (c) 2008-2024 The Jasmine developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2023 Pivotal Labs
|
Copyright (c) 2008-2019 Pivotal Labs
|
||||||
|
Copyright (c) 2008-2024 The Jasmine developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
Copyright (c) 2008-2023 Pivotal Labs
|
Copyright (c) 2008-2019 Pivotal Labs
|
||||||
|
Copyright (c) 2008-2024 The Jasmine developers
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining
|
Permission is hereby granted, free of charge, to any person obtaining
|
||||||
a copy of this software and associated documentation files (the
|
a copy of this software and associated documentation files (the
|
||||||
@@ -2700,11 +2701,7 @@ getJasmineRequireObj().buildExpectationResult = function(j$) {
|
|||||||
} else if (options.stack) {
|
} else if (options.stack) {
|
||||||
error = options;
|
error = options;
|
||||||
} else {
|
} else {
|
||||||
try {
|
error = new Error(message());
|
||||||
throw new Error(message());
|
|
||||||
} catch (e) {
|
|
||||||
error = e;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Omit the message from the stack trace because it will be
|
// Omit the message from the stack trace because it will be
|
||||||
@@ -3228,6 +3225,9 @@ getJasmineRequireObj().CompleteOnFirstErrorSkipPolicy = function(j$) {
|
|||||||
return CompleteOnFirstErrorSkipPolicy;
|
return CompleteOnFirstErrorSkipPolicy;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Warning: don't add "use strict" to this file. Doing so potentially changes
|
||||||
|
// the behavior of user code that does things like setTimeout("var x = 1;")
|
||||||
|
// while the mock clock is installed.
|
||||||
getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
||||||
function DelayedFunctionScheduler() {
|
function DelayedFunctionScheduler() {
|
||||||
this.scheduledLookup_ = [];
|
this.scheduledLookup_ = [];
|
||||||
@@ -3253,6 +3253,9 @@ getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
|||||||
) {
|
) {
|
||||||
let f;
|
let f;
|
||||||
if (typeof funcToCall === 'string') {
|
if (typeof funcToCall === 'string') {
|
||||||
|
// setTimeout("some code") and setInterval("some code") are legal, if
|
||||||
|
// not recommended. We don't do that ourselves, but user code might.
|
||||||
|
// This allows such code to work when the mock clock is installed.
|
||||||
f = function() {
|
f = function() {
|
||||||
// eslint-disable-next-line no-eval
|
// eslint-disable-next-line no-eval
|
||||||
return eval(funcToCall);
|
return eval(funcToCall);
|
||||||
@@ -7159,6 +7162,8 @@ getJasmineRequireObj().NeverSkipPolicy = function(j$) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
getJasmineRequireObj().ParallelReportDispatcher = function(j$) {
|
getJasmineRequireObj().ParallelReportDispatcher = function(j$) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class ParallelReportDispatcher
|
* @class ParallelReportDispatcher
|
||||||
* @implements Reporter
|
* @implements Reporter
|
||||||
@@ -7177,7 +7182,7 @@ getJasmineRequireObj().ParallelReportDispatcher = function(j$) {
|
|||||||
const ReportDispatcher = deps.ReportDispatcher || j$.ReportDispatcher;
|
const ReportDispatcher = deps.ReportDispatcher || j$.ReportDispatcher;
|
||||||
const QueueRunner = deps.QueueRunner || j$.QueueRunner;
|
const QueueRunner = deps.QueueRunner || j$.QueueRunner;
|
||||||
const globalErrors = deps.globalErrors || new j$.GlobalErrors();
|
const globalErrors = deps.globalErrors || new j$.GlobalErrors();
|
||||||
const dispatcher = ReportDispatcher(
|
const dispatcher = new ReportDispatcher(
|
||||||
j$.reporterEvents,
|
j$.reporterEvents,
|
||||||
function(queueRunnerOptions) {
|
function(queueRunnerOptions) {
|
||||||
queueRunnerOptions = {
|
queueRunnerOptions = {
|
||||||
@@ -7903,6 +7908,8 @@ getJasmineRequireObj().QueueRunner = function(j$) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
getJasmineRequireObj().ReportDispatcher = function(j$) {
|
getJasmineRequireObj().ReportDispatcher = function(j$) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
function ReportDispatcher(methods, queueRunnerFactory, onLateError) {
|
function ReportDispatcher(methods, queueRunnerFactory, onLateError) {
|
||||||
const dispatchedMethods = methods || [];
|
const dispatchedMethods = methods || [];
|
||||||
|
|
||||||
@@ -8302,7 +8309,7 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|||||||
* @return {matchers}
|
* @return {matchers}
|
||||||
*/
|
*/
|
||||||
throwUnlessAsync: function(actual) {
|
throwUnlessAsync: function(actual) {
|
||||||
return env.throwUnless(actual);
|
return env.throwUnlessAsync(actual);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -8479,7 +8486,11 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|||||||
* @since 1.3.0
|
* @since 1.3.0
|
||||||
* @function
|
* @function
|
||||||
* @param {String} [name] - Name to give the spy. This will be displayed in failure messages.
|
* @param {String} [name] - Name to give the spy. This will be displayed in failure messages.
|
||||||
* @param {Function} [originalFn] - Function to act as the real implementation.
|
* @param {Function} [originalFn] - The "real" function. This will
|
||||||
|
* be used for subsequent calls to the spy after you call
|
||||||
|
* `mySpy.and.callThrough()`. In most cases you should omit this parameter.
|
||||||
|
* The usual way to supply an original function is to call {@link spyOn}
|
||||||
|
* instead of createSpy.
|
||||||
* @return {Spy}
|
* @return {Spy}
|
||||||
*/
|
*/
|
||||||
jasmine.createSpy = function(name, originalFn) {
|
jasmine.createSpy = function(name, originalFn) {
|
||||||
@@ -10802,5 +10813,5 @@ getJasmineRequireObj().UserContext = function(j$) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
getJasmineRequireObj().version = function() {
|
getJasmineRequireObj().version = function() {
|
||||||
return '5.1.0';
|
return '5.1.2';
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "jasmine-core",
|
"name": "jasmine-core",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "5.1.0",
|
"version": "5.1.2",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/jasmine/jasmine.git"
|
"url": "https://github.com/jasmine/jasmine.git"
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
"homepage": "https://jasmine.github.io",
|
"homepage": "https://jasmine.github.io",
|
||||||
"main": "./lib/jasmine-core.js",
|
"main": "./lib/jasmine-core.js",
|
||||||
"files": [
|
"files": [
|
||||||
"MIT.LICENSE",
|
"LICENSE",
|
||||||
"README.md",
|
"README.md",
|
||||||
"images/*.{png,svg}",
|
"images/*.{png,svg}",
|
||||||
"lib/**/*.{js,css}",
|
"lib/**/*.{js,css}",
|
||||||
|
|||||||
28
release_notes/5.1.1.md
Normal file
28
release_notes/5.1.1.md
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
# Jasmine Core 5.1.1 Release Notes
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
* Fixed global variable leak in the main process when running in parallel mode
|
||||||
|
* Removed unnecessary throw when building expectation results
|
||||||
|
|
||||||
|
## Documentation Improvements
|
||||||
|
|
||||||
|
* Improved jsdocs for originalFn argument to createSpy
|
||||||
|
* Link to 5.0 upgrade guide in README, not 4.0
|
||||||
|
|
||||||
|
## Supported environments
|
||||||
|
|
||||||
|
jasmine-core 5.1.1 has been tested in the following environments.
|
||||||
|
|
||||||
|
| Environment | Supported versions |
|
||||||
|
|-------------------|--------------------|
|
||||||
|
| Node | 18, 20 |
|
||||||
|
| Safari | 15-16 |
|
||||||
|
| Chrome | 116 |
|
||||||
|
| Firefox | 102, 116 |
|
||||||
|
| Edge | 115 |
|
||||||
|
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
_Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
|
||||||
27
release_notes/5.1.2.md
Normal file
27
release_notes/5.1.2.md
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
# Jasmine Core 5.1.2 Release Notes
|
||||||
|
|
||||||
|
## Bug Fixes
|
||||||
|
|
||||||
|
* Fixed `throwUnlessAsync`
|
||||||
|
* Fixes [#2026](https://github.com/jasmine/jasmine/issues/2026)
|
||||||
|
|
||||||
|
# Documentation improvements
|
||||||
|
|
||||||
|
* Added Safari 17 to supported browsers
|
||||||
|
* Added Firefox 115 (current ESR) to supported browsers
|
||||||
|
|
||||||
|
## Supported environments
|
||||||
|
|
||||||
|
This version has been tested in the following environments.
|
||||||
|
|
||||||
|
| Environment | Supported versions |
|
||||||
|
|-------------------|--------------------|
|
||||||
|
| Node | 18, 20 |
|
||||||
|
| Safari | 15-17 |
|
||||||
|
| Chrome | 121 |
|
||||||
|
| Firefox | 102, 115, 122 |
|
||||||
|
| Edge | 121 |
|
||||||
|
|
||||||
|
------
|
||||||
|
|
||||||
|
_Release Notes generated with _[Anchorman](http://github.com/infews/anchorman)_
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
run_browser() {
|
run_browser() {
|
||||||
browser=$1
|
browser=$1
|
||||||
version=$2
|
version=$2
|
||||||
|
os="$3"
|
||||||
description="$browser $version"
|
description="$browser $version"
|
||||||
if [ $version = "latest" ]; then
|
if [ $version = "latest" ]; then
|
||||||
version=""
|
version=""
|
||||||
@@ -12,7 +13,7 @@ run_browser() {
|
|||||||
echo
|
echo
|
||||||
echo "Running $description"
|
echo "Running $description"
|
||||||
echo
|
echo
|
||||||
USE_SAUCE=true JASMINE_BROWSER=$browser SAUCE_BROWSER_VERSION=$version npm run ci
|
USE_SAUCE=true JASMINE_BROWSER=$browser SAUCE_BROWSER_VERSION=$version SAUCE_OS="$os" npm run ci
|
||||||
|
|
||||||
if [ $? -eq 0 ]; then
|
if [ $? -eq 0 ]; then
|
||||||
echo "PASS: $description" >> "$passfile"
|
echo "PASS: $description" >> "$passfile"
|
||||||
@@ -23,9 +24,21 @@ run_browser() {
|
|||||||
|
|
||||||
passfile=`mktemp -t jasmine-results.XXXXXX` || exit 1
|
passfile=`mktemp -t jasmine-results.XXXXXX` || exit 1
|
||||||
failfile=`mktemp -t jasmine-results.XXXXXX` || exit 1
|
failfile=`mktemp -t jasmine-results.XXXXXX` || exit 1
|
||||||
run_browser chrome latest
|
|
||||||
|
# As of 2023-09-30, Sauce Connect doesn't work with the latest Chrome version
|
||||||
|
# on the default Linux. Run on Mac OS instead. The OS specification may need to
|
||||||
|
# be updated or removed when new Chrome versions stop being available on Mac OS
|
||||||
|
# 12, although historically this has taken several major OS versions.
|
||||||
|
# See <https://saucelabs.com/products/supported-browsers-devices>.
|
||||||
|
# On Saucelabs, the test suite frequently runs ~30s slower on Mac OS than it
|
||||||
|
# does on Linux, so it's probably worth removing the OS specification once Sauce
|
||||||
|
# Connect works with Chrome latest on Linux again.
|
||||||
|
run_browser chrome latest "macOS 12"
|
||||||
|
|
||||||
run_browser firefox latest
|
run_browser firefox latest
|
||||||
|
run_browser firefox 115
|
||||||
run_browser firefox 102
|
run_browser firefox 102
|
||||||
|
run_browser safari 17
|
||||||
run_browser safari 16
|
run_browser safari 16
|
||||||
run_browser safari 15
|
run_browser safari 15
|
||||||
run_browser MicrosoftEdge latest
|
run_browser MicrosoftEdge latest
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ describe('Env integration', function() {
|
|||||||
const isBrowser = typeof window !== 'undefined';
|
const isBrowser = typeof window !== 'undefined';
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
jasmine.getEnv().registerIntegrationMatchers();
|
specHelpers.registerIntegrationMatchers();
|
||||||
env = new jasmineUnderTest.Env();
|
env = new jasmineUnderTest.Env();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -610,19 +610,13 @@ describe('Matchers (Integration)', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
describe('toHaveClass', function() {
|
describe('toHaveClass', function() {
|
||||||
beforeEach(function() {
|
|
||||||
this.domHelpers = jasmine.getEnv().domHelpers();
|
|
||||||
});
|
|
||||||
|
|
||||||
verifyPasses(function(env) {
|
verifyPasses(function(env) {
|
||||||
const domHelpers = jasmine.getEnv().domHelpers();
|
const el = specHelpers.domHelpers.createElementWithClassName('foo');
|
||||||
const el = domHelpers.createElementWithClassName('foo');
|
|
||||||
env.expect(el).toHaveClass('foo');
|
env.expect(el).toHaveClass('foo');
|
||||||
});
|
});
|
||||||
|
|
||||||
verifyFails(function(env) {
|
verifyFails(function(env) {
|
||||||
const domHelpers = jasmine.getEnv().domHelpers();
|
const el = specHelpers.domHelpers.createElementWithClassName('foo');
|
||||||
const el = domHelpers.createElementWithClassName('foo');
|
|
||||||
env.expect(el).toHaveClass('bar');
|
env.expect(el).toHaveClass('bar');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ describe('spec running', function() {
|
|||||||
let env;
|
let env;
|
||||||
|
|
||||||
beforeEach(function() {
|
beforeEach(function() {
|
||||||
jasmine.getEnv().registerIntegrationMatchers();
|
specHelpers.registerIntegrationMatchers();
|
||||||
env = new jasmineUnderTest.Env();
|
env = new jasmineUnderTest.Env();
|
||||||
env.configure({ random: false });
|
env.configure({ random: false });
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,12 +1,8 @@
|
|||||||
describe('toHaveClass', function() {
|
describe('toHaveClass', function() {
|
||||||
beforeEach(function() {
|
|
||||||
this.domHelpers = jasmine.getEnv().domHelpers();
|
|
||||||
});
|
|
||||||
|
|
||||||
it('fails for a DOM element that lacks the expected class', function() {
|
it('fails for a DOM element that lacks the expected class', function() {
|
||||||
const matcher = jasmineUnderTest.matchers.toHaveClass(),
|
const matcher = jasmineUnderTest.matchers.toHaveClass(),
|
||||||
result = matcher.compare(
|
result = matcher.compare(
|
||||||
this.domHelpers.createElementWithClassName(''),
|
specHelpers.domHelpers.createElementWithClassName(''),
|
||||||
'foo'
|
'foo'
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -15,7 +11,7 @@ describe('toHaveClass', function() {
|
|||||||
|
|
||||||
it('passes for a DOM element that has the expected class', function() {
|
it('passes for a DOM element that has the expected class', function() {
|
||||||
const matcher = jasmineUnderTest.matchers.toHaveClass(),
|
const matcher = jasmineUnderTest.matchers.toHaveClass(),
|
||||||
el = this.domHelpers.createElementWithClassName('foo bar baz');
|
el = specHelpers.domHelpers.createElementWithClassName('foo bar baz');
|
||||||
|
|
||||||
expect(matcher.compare(el, 'foo').pass).toBe(true);
|
expect(matcher.compare(el, 'foo').pass).toBe(true);
|
||||||
expect(matcher.compare(el, 'bar').pass).toBe(true);
|
expect(matcher.compare(el, 'bar').pass).toBe(true);
|
||||||
@@ -24,7 +20,7 @@ describe('toHaveClass', function() {
|
|||||||
|
|
||||||
it('fails for a DOM element that only has other classes', function() {
|
it('fails for a DOM element that only has other classes', function() {
|
||||||
const matcher = jasmineUnderTest.matchers.toHaveClass(),
|
const matcher = jasmineUnderTest.matchers.toHaveClass(),
|
||||||
el = this.domHelpers.createElementWithClassName('foo bar');
|
el = specHelpers.domHelpers.createElementWithClassName('foo bar');
|
||||||
|
|
||||||
expect(matcher.compare(el, 'fo').pass).toBe(false);
|
expect(matcher.compare(el, 'fo').pass).toBe(false);
|
||||||
});
|
});
|
||||||
@@ -42,7 +38,7 @@ describe('toHaveClass', function() {
|
|||||||
matcher.compare(undefined, 'foo');
|
matcher.compare(undefined, 'foo');
|
||||||
}).toThrowError('undefined is not a DOM element');
|
}).toThrowError('undefined is not a DOM element');
|
||||||
|
|
||||||
const textNode = this.domHelpers.document.createTextNode('');
|
const textNode = specHelpers.domHelpers.document.createTextNode('');
|
||||||
expect(function() {
|
expect(function() {
|
||||||
matcher.compare(textNode, 'foo');
|
matcher.compare(textNode, 'foo');
|
||||||
}).toThrowError('HTMLNode is not a DOM element');
|
}).toThrowError('HTMLNode is not a DOM element');
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
(function(env) {
|
(function() {
|
||||||
function browserVersion(matchFn) {
|
function browserVersion(matchFn) {
|
||||||
const userAgent = jasmine.getGlobal().navigator.userAgent;
|
const userAgent = jasmine.getGlobal().navigator.userAgent;
|
||||||
if (!userAgent) {
|
if (!userAgent) {
|
||||||
@@ -10,7 +10,7 @@
|
|||||||
return match ? parseFloat(match[1]) : void 0;
|
return match ? parseFloat(match[1]) : void 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
env.firefoxVersion = browserVersion(function(userAgent) {
|
specHelpers.firefoxVersion = browserVersion(function(userAgent) {
|
||||||
return /Firefox\/([0-9]{0,})/.exec(userAgent);
|
return /Firefox\/([0-9]{0,})/.exec(userAgent);
|
||||||
});
|
});
|
||||||
})(jasmine.getEnv());
|
})();
|
||||||
|
|||||||
@@ -1,24 +1,20 @@
|
|||||||
(function(env) {
|
(function() {
|
||||||
function domHelpers() {
|
let doc;
|
||||||
let doc;
|
|
||||||
|
|
||||||
if (typeof document !== 'undefined') {
|
if (typeof document !== 'undefined') {
|
||||||
doc = document;
|
doc = document;
|
||||||
} else {
|
} else {
|
||||||
const JSDOM = require('jsdom').JSDOM;
|
const JSDOM = require('jsdom').JSDOM;
|
||||||
const dom = new JSDOM();
|
const dom = new JSDOM();
|
||||||
doc = dom.window.document;
|
doc = dom.window.document;
|
||||||
}
|
|
||||||
|
|
||||||
return {
|
|
||||||
document: doc,
|
|
||||||
createElementWithClassName: function(className) {
|
|
||||||
const el = this.document.createElement('div');
|
|
||||||
el.className = className;
|
|
||||||
return el;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
env.domHelpers = domHelpers;
|
specHelpers.domHelpers = {
|
||||||
})(jasmine.getEnv());
|
document: doc,
|
||||||
|
createElementWithClassName(className) {
|
||||||
|
const el = this.document.createElement('div');
|
||||||
|
el.className = className;
|
||||||
|
return el;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
})();
|
||||||
|
|||||||
1
spec/helpers/init.js
Normal file
1
spec/helpers/init.js
Normal file
@@ -0,0 +1 @@
|
|||||||
|
globalThis.specHelpers = {};
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
(function(env) {
|
(function() {
|
||||||
env.registerIntegrationMatchers = function() {
|
specHelpers.registerIntegrationMatchers = function() {
|
||||||
jasmine.addMatchers({
|
jasmine.addMatchers({
|
||||||
toHaveFailedExpectationsForRunnable: function() {
|
toHaveFailedExpectationsForRunnable: function() {
|
||||||
return {
|
return {
|
||||||
@@ -51,4 +51,4 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
})(jasmine.getEnv());
|
})();
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ describe('PrettyPrinter (HTML Dependent)', function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should print Firefox's wrapped native objects correctly", function() {
|
it("should print Firefox's wrapped native objects correctly", function() {
|
||||||
if (jasmine.getEnv().firefoxVersion) {
|
if (specHelpers.firefoxVersion) {
|
||||||
const pp = jasmineUnderTest.makePrettyPrinter();
|
const pp = jasmineUnderTest.makePrettyPrinter();
|
||||||
let err;
|
let err;
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -113,7 +113,7 @@ describe('npm package', function() {
|
|||||||
const files = fs.readdirSync(path.resolve(this.tmpDir, 'package'));
|
const files = fs.readdirSync(path.resolve(this.tmpDir, 'package'));
|
||||||
files.sort();
|
files.sort();
|
||||||
expect(files).toEqual([
|
expect(files).toEqual([
|
||||||
'MIT.LICENSE',
|
'LICENSE',
|
||||||
'README.md',
|
'README.md',
|
||||||
'images',
|
'images',
|
||||||
'lib',
|
'lib',
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ module.exports = {
|
|||||||
specDir: 'spec',
|
specDir: 'spec',
|
||||||
specFiles: ['**/*[Ss]pec.js', '!npmPackage/**/*'],
|
specFiles: ['**/*[Ss]pec.js', '!npmPackage/**/*'],
|
||||||
helpers: [
|
helpers: [
|
||||||
|
'helpers/init.js',
|
||||||
'helpers/generator.js',
|
'helpers/generator.js',
|
||||||
'helpers/BrowserFlags.js',
|
'helpers/BrowserFlags.js',
|
||||||
'helpers/domHelpers.js',
|
'helpers/domHelpers.js',
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
"npmPackage/**/*[Ss]pec.js"
|
"npmPackage/**/*[Ss]pec.js"
|
||||||
],
|
],
|
||||||
"helpers": [
|
"helpers": [
|
||||||
|
"helpers/init.js",
|
||||||
"helpers/domHelpers.js",
|
"helpers/domHelpers.js",
|
||||||
"helpers/integrationMatchers.js",
|
"helpers/integrationMatchers.js",
|
||||||
"helpers/overrideConsoleLogForCircleCi.js",
|
"helpers/overrideConsoleLogForCircleCi.js",
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
// Warning: don't add "use strict" to this file. Doing so potentially changes
|
||||||
|
// the behavior of user code that does things like setTimeout("var x = 1;")
|
||||||
|
// while the mock clock is installed.
|
||||||
getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
||||||
function DelayedFunctionScheduler() {
|
function DelayedFunctionScheduler() {
|
||||||
this.scheduledLookup_ = [];
|
this.scheduledLookup_ = [];
|
||||||
@@ -23,6 +26,9 @@ getJasmineRequireObj().DelayedFunctionScheduler = function(j$) {
|
|||||||
) {
|
) {
|
||||||
let f;
|
let f;
|
||||||
if (typeof funcToCall === 'string') {
|
if (typeof funcToCall === 'string') {
|
||||||
|
// setTimeout("some code") and setInterval("some code") are legal, if
|
||||||
|
// not recommended. We don't do that ourselves, but user code might.
|
||||||
|
// This allows such code to work when the mock clock is installed.
|
||||||
f = function() {
|
f = function() {
|
||||||
// eslint-disable-next-line no-eval
|
// eslint-disable-next-line no-eval
|
||||||
return eval(funcToCall);
|
return eval(funcToCall);
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
getJasmineRequireObj().ParallelReportDispatcher = function(j$) {
|
getJasmineRequireObj().ParallelReportDispatcher = function(j$) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class ParallelReportDispatcher
|
* @class ParallelReportDispatcher
|
||||||
* @implements Reporter
|
* @implements Reporter
|
||||||
@@ -17,7 +19,7 @@ getJasmineRequireObj().ParallelReportDispatcher = function(j$) {
|
|||||||
const ReportDispatcher = deps.ReportDispatcher || j$.ReportDispatcher;
|
const ReportDispatcher = deps.ReportDispatcher || j$.ReportDispatcher;
|
||||||
const QueueRunner = deps.QueueRunner || j$.QueueRunner;
|
const QueueRunner = deps.QueueRunner || j$.QueueRunner;
|
||||||
const globalErrors = deps.globalErrors || new j$.GlobalErrors();
|
const globalErrors = deps.globalErrors || new j$.GlobalErrors();
|
||||||
const dispatcher = ReportDispatcher(
|
const dispatcher = new ReportDispatcher(
|
||||||
j$.reporterEvents,
|
j$.reporterEvents,
|
||||||
function(queueRunnerOptions) {
|
function(queueRunnerOptions) {
|
||||||
queueRunnerOptions = {
|
queueRunnerOptions = {
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
getJasmineRequireObj().ReportDispatcher = function(j$) {
|
getJasmineRequireObj().ReportDispatcher = function(j$) {
|
||||||
|
'use strict';
|
||||||
|
|
||||||
function ReportDispatcher(methods, queueRunnerFactory, onLateError) {
|
function ReportDispatcher(methods, queueRunnerFactory, onLateError) {
|
||||||
const dispatchedMethods = methods || [];
|
const dispatchedMethods = methods || [];
|
||||||
|
|
||||||
|
|||||||
@@ -69,11 +69,7 @@ getJasmineRequireObj().buildExpectationResult = function(j$) {
|
|||||||
} else if (options.stack) {
|
} else if (options.stack) {
|
||||||
error = options;
|
error = options;
|
||||||
} else {
|
} else {
|
||||||
try {
|
error = new Error(message());
|
||||||
throw new Error(message());
|
|
||||||
} catch (e) {
|
|
||||||
error = e;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Omit the message from the stack trace because it will be
|
// Omit the message from the stack trace because it will be
|
||||||
|
|||||||
@@ -246,7 +246,7 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|||||||
* @return {matchers}
|
* @return {matchers}
|
||||||
*/
|
*/
|
||||||
throwUnlessAsync: function(actual) {
|
throwUnlessAsync: function(actual) {
|
||||||
return env.throwUnless(actual);
|
return env.throwUnlessAsync(actual);
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -423,7 +423,11 @@ getJasmineRequireObj().interface = function(jasmine, env) {
|
|||||||
* @since 1.3.0
|
* @since 1.3.0
|
||||||
* @function
|
* @function
|
||||||
* @param {String} [name] - Name to give the spy. This will be displayed in failure messages.
|
* @param {String} [name] - Name to give the spy. This will be displayed in failure messages.
|
||||||
* @param {Function} [originalFn] - Function to act as the real implementation.
|
* @param {Function} [originalFn] - The "real" function. This will
|
||||||
|
* be used for subsequent calls to the spy after you call
|
||||||
|
* `mySpy.and.callThrough()`. In most cases you should omit this parameter.
|
||||||
|
* The usual way to supply an original function is to call {@link spyOn}
|
||||||
|
* instead of createSpy.
|
||||||
* @return {Spy}
|
* @return {Spy}
|
||||||
*/
|
*/
|
||||||
jasmine.createSpy = function(name, originalFn) {
|
jasmine.createSpy = function(name, originalFn) {
|
||||||
|
|||||||
Reference in New Issue
Block a user