Security News
PyPI Introduces Digital Attestations to Strengthen Python Package Security
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
jasmine-node
Advanced tools
This node.js module makes the wonderful Pivotal Lab's jasmine spec framework available in node.js.
This project is now in maintenance mode. It is recommended to use the jasmine
or jasmine-npm
package whenever possible.
Version 1.3.1
of Jasmine is currently included with node-jasmine. This is a forked version from the
Karma project, which allows you to use the
ddescribe
and iit
functions to run individual suites or specs.
BETA 2.0.0
Support is available in the Jasmine2.0
branch.
--growl
flag (requires Growl to be installed)--noStack
--config
flag that allows you to assign variables to process.envafterEach
is available in requirejs #179describe
blocks much more accurately!--coffee
now allows specs written in Literate CoffeeScript (.litcoffee
)To install the latest official version, use NPM:
npm install jasmine-node -g
To install the latest bleeding edge version, clone this repository and check
out the beta
branch.
Write the specifications for your code in *.js
and *.coffee
files in the spec/
directory.
You can use sub-directories to better organise your specs. In the specs use describe()
, it()
etc. exactly
as you would in client-side jasmine specs.
Note: your specification files must be named as *spec.js
, *spec.coffee
or *spec.litcoffee
,
which matches the regular expression /spec\.(js|coffee|litcoffee)$/i
;
otherwise jasmine-node won't find them!
For example, sampleSpecs.js
is wrong, sampleSpec.js
is right.
If you have installed the npm package, you can run it with:
jasmine-node spec/
If you aren't using npm, you should add pwd
/lib to the $NODE_PATH
environment variable, then run:
node lib/jasmine-node/cli.js
You can supply the following arguments:
--autotest
, provides automatic execution of specs after each change--watch
, when used with --autotest
, paths after --watch
will be
watched for changes, allowing to watch for changes outside of specs directory--coffee
, allow execution of .coffee
and .litcoffee
specs--color
, indicates spec output should uses color to
indicates passing (green) or failing (red) specs--noColor
, do not use color in the output-m, --match REGEXP
, match only specs containing "REGEXPspec"--matchall
, relax requirement of "spec" in spec file names--verbose
, verbose output as the specs are run--junitreport
, export tests results as junitreport xml format--output FOLDER
, defines the output folder for junitreport files--teamcity
, converts all console output to teamcity custom test runner commands. (Normally auto detected.)--growl
, display test run summary in a growl notification (in addition to other outputs)--runWithRequireJs
, loads all specs using requirejs instead of node's native require method--requireJsSetup
, file run before specs to include and configure RequireJS--test-dir
, the absolute root directory path where tests are located--nohelpers
, does not load helpers--forceexit
, force exit once tests complete--captureExceptions
, listen to global exceptions, report them and exit (interferes with Domains in NodeJs, so do not use if using Domains as well--config NAME VALUE
, set a global variable in process.env
--noStack
, suppress the stack trace generated from a test failureIndividual files to test can be added as bare arguments to the end of the args.
Example:
jasmine-node --coffee spec/AsyncSpec.coffee spec/CoffeeSpec.coffee spec/SampleSpec.js
jasmine-node includes an alternate syntax for writing asynchronous tests. Accepting
a done callback in the specification will trigger jasmine-node to run the test
asynchronously waiting until the done()
callback is called.
var request = require('request');
it("should respond with hello world", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
expect(body).toEqual("hello world");
done();
});
});
An asynchronous test will fail after 5000
ms if done()
is not called. This timeout
can be changed by setting jasmine.getEnv().defaultTimeoutInterval
or by passing a timeout
interval in the specification.
var request = require('request');
it("should respond with hello world", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
done();
});
}, 250); // timeout after 250 ms
or
var request = require('request');
jasmine.getEnv().defaultTimeoutInterval = 500;
it("should respond with hello world", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
done();
}); // timeout after 500 ms
});
Checkout spec/SampleSpecs.js
to see how to use it.
There is a sample project in /spec-requirejs
. It is comprised of:
requirejs-setup.js
, this pulls in our wrapper template (next)requirejs-wrapper-template
, this builds up requirejs settingsrequirejs.sut.js
, this is a __SU__bject To __T__est, something required by requirejsrequirejs.spec.js
, the actual jasmine spec for testingTo run it:
node lib/jasmine-node/cli.js --runWithRequireJs --requireJsSetup ./spec-requirejs/requirejs-setup.js ./spec-requirejs/
Often you'll want to capture an uncaught exception and log it to the console,
this is accomplished by using the --captureExceptions
flag. Exceptions will
be reported to the console, but jasmine-node will attempt to recover and
continue. It was decided to not change the current functionality until 2.0
. So,
until then, jasmine-node will still return 0
and continue on without this flag.
You require a module, but it doesn't exist, ie require('Q')
instead of
require('q')
. Jasmine-Node reports the error to the console, but carries on
and returns 0
. This messes up Travis-CI because you need it to return a
non-zero status while doing CI tests.
Before --captureExceptions
> jasmine-node --coffee spec
> echo $status
0
Run jasmine node with the --captureExceptions
flag.
> jasmine-node --coffee --captureExceptions spec
> echo $status
1
Jasmine node can display Growl notifications of test
run summaries in addition to other reports.
Growl must be installed separately, see node-growl
for platform-specific instructions. Pass the --growl
flag to enable the notifications.
Install the dependent packages by running:
npm install
Run the specs before you send your pull request:
specs.sh
Note: Some tests are designed to fail in the specs.sh. After each of the individual runs completes, there is a line that lists what the expected Pass/Assert/Fail count should be. If you add/remove/edit tests, please be sure to update this with your PR.
dependencies
to prevent major package updatesnpm audit
issuesiit
, ddescribe
(thanks to mgcrea)util.print
to stdout.write
(thanks to nrstott)--growl
(thanks to
AlphaHydrae)beforeEach
and afterEach
now properly handle the async-timeout function--version
--watch
feature
(thanks to davegb3)0.6
(thanks to abe33)--config
flag for changeable testing environments--autotest
now works as expected, jasmine clock now responds to the fake ticking as requested, and removed the path.exists warning1.3.1
, fixed fs missing, catching uncaught exceptions, other fixesFAQs
DOM-less simple JavaScript BDD testing framework for Node
We found that jasmine-node demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PyPI now supports digital attestations, enhancing security and trust by allowing package maintainers to verify the authenticity of Python packages.
Security News
GitHub removed 27 malicious pull requests attempting to inject harmful code across multiple open source repositories, in another round of low-effort attacks.
Security News
RubyGems.org has added a new "maintainer" role that allows for publishing new versions of gems. This new permission type is aimed at improving security for gem owners and the service overall.