Skip to content

Commit

Permalink
Merge branch 'master' of github.com:mhevery/jasmine-node into AlphaHy…
Browse files Browse the repository at this point in the history
…drae-growl

Conflicts:
	README.md
  • Loading branch information
Chris Moultrie committed Jul 30, 2013
2 parents 3dd0c74 + d6ddf5e commit 0ec1346
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 76 deletions.
160 changes: 89 additions & 71 deletions README.md
Expand Up @@ -10,131 +10,143 @@ node.js.
jasmine
-------

Version 1.3.1 of Jasmine is currently included with node-jasmine.
Version `1.3.1` of Jasmine is currently included with node-jasmine.

what's new
----------
* Ability to test specs written in Literate Coffee-Script
* Teamcity Reporter reinstated.
* Ability to specify multiple files to test via list in command line
* Ability to suppress stack trace with <code>--noStack</code>
* Ability to suppress stack trace with `--noStack`
* Async tests now run in the expected context instead of the global one
* --config flag that allows you to assign variables to process.env
* `--config` flag that allows you to assign variables to process.env
* Terminal Reporters are now available in the Jasmine Object #184
* Done is now available in all timeout specs #199
* <code>afterEach</code> is available in requirejs #179
* `afterEach` is available in requirejs #179
* Editors that replace instead of changing files should work with autotest #198
* Jasmine Mock Clock now works!
* Autotest now works!
* Using the latest Jasmine!
* Verbose mode tabs <code>describe</code> blocks much more accurately!
* --coffee now allows specs written in Literate CoffeeScript (.litcoffee)
* Verbose mode tabs `describe` blocks much more accurately!
* `--coffee` now allows specs written in Literate CoffeeScript (`.litcoffee`)

install
------

To install the latest official version, use NPM:

npm install jasmine-node -g
```sh
npm install jasmine-node -g
```

To install the latest _bleeding edge_ version, clone this repository and check
out the `beta` branch.

usage
------

Write the specifications for your code in \*.js and \*.coffee files in the
spec/ directory (note: your specification files must end with either
.spec.js, .spec.coffee or .spec.litcoffee; otherwise jasmine-node won't find them!). You can use sub-directories to better organise your specs.
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.

**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/
```sh
jasmine-node spec/
```

If you aren't using npm, you should add `pwd`/lib to the $NODE_PATH
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
```sh
node lib/jasmine-node/cli.js
```


You can supply the following arguments:

* <code>--autotest</code>, provides automatic execution of specs after each change
* <code>--watch</code>, when used with <code>--autotest</code>, paths after <code>--watch</code> will be
* `--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
* <code>--coffee</code>, allow execution of .coffee and .litcoffee specs
* <code>--color</code>, indicates spec output should uses color to
* `--coffee`, allow execution of `.coffee` and `.litcoffee` specs
* `--color`, indicates spec output should uses color to
indicates passing (green) or failing (red) specs
* <code>--noColor</code>, do not use color in the output
* <code>-m, --match REGEXP</code>, match only specs comtaining "REGEXPspec"
* <code>--matchall</code>, relax requirement of "spec" in spec file names
* <code>--verbose</code>, verbose output as the specs are run
* <code>--junitreport</code>, export tests results as junitreport xml format
* <code>--output FOLDER</code>, defines the output folder for junitreport files
* <code>--teamcity</code>, converts all console output to teamcity custom test runner commands. (Normally auto detected.)
* <code>--growl</code>, display test run summary in a growl notification (in addition to other outputs)
* <code>--runWithRequireJs</code>, loads all specs using requirejs instead of node's native require method
* <code>--requireJsSetup</code>, file run before specs to include and configure RequireJS
* <code>--test-dir</code>, the absolute root directory path where tests are located
* <code>--nohelpers</code>, does not load helpers
* <code>--forceexit</code>, force exit once tests complete
* <code>--captureExceptions</code>, listen to global exceptions, report them and exit (interferes with Domains in NodeJs, so do not use if using Domains as well
* <code>--config NAME VALUE</code>, set a global variable in process.env
* <code>--noStack</code>, suppress the stack trace generated from a test failure
* `--noColor`, do not use color in the output
* `-m, --match REGEXP`, match only specs comtaining "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 failure

Individual 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/SampleSpecs.js`
```bash
jasmine-node --coffee spec/AsyncSpec.coffee spec/CoffeeSpec.coffee spec/SampleSpec.js
```

async tests
-----------

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.
asynchronously waiting until the `done()` callback is called.

```javascript
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();
});
});
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
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.

```javascript
var request = require('request');
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
});
it("should respond with hello world", function(done) {
request("http://localhost:3000/hello", function(error, response, body){
done();
}, 250); // timeout after 250 ms
});
```

or

```javascript
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
});
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.
Checkout [`spec/SampleSpecs.js`](https://github.com/mhevery/jasmine-node/blob/master/spec/SampleSpecs.js) to see how to use it.


requirejs
Expand All @@ -149,22 +161,24 @@ There is a sample project in `/spec-requirejs`. It is comprised of:

To run it:

node lib/jasmine-node/cli.js --runWithRequireJs --requireJsSetup ./spec-requirejs/requirejs-setup.js ./spec-requirejs/
```sh
node lib/jasmine-node/cli.js --runWithRequireJs --requireJsSetup ./spec-requirejs/requirejs-setup.js ./spec-requirejs/
```

exceptions
----------

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.
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.

### Scenario ###

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
and returns `0`. This messes up Travis-CI because you need it to return a
non-zero status while doing CI tests.

### Mitigation ###
Expand Down Expand Up @@ -200,11 +214,15 @@ development

Install the dependent packages by running:

npm install
```sh
npm install
```

Run the specs before you send your pull request:

specs.sh
```sh
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
Expand All @@ -226,21 +244,21 @@ changelog
printing version with `--version`_
* _1.8.1 - Fixed silent failure due to invalid REGEX (thanks to
[pimterry](https://github.com/pimterry))_
* _1.8.0 - Fixed bug in autotest with multiple paths and added --watch feature
* _1.8.0 - Fixed bug in autotest with multiple paths and added `--watch` feature
(thanks to [davegb3](https://github.com/davegb3))_
* _1.7.1 - Removed unneeded fs dependency (thanks to
[kevinsawicki](https://github.com/kevinsawicki)) Fixed broken fs call in
node 0.6 (thanks to [abe33](https://github.com/abe33))_
node `0.6` (thanks to [abe33](https://github.com/abe33))_
* _1.7.0 - Literate Coffee-Script now testable (thanks to [magicmoose](https://github.com/magicmoose))_
* _1.6.0 - Teamcity Reporter Reinstated (thanks to [bhcleek](https://github.com/bhcleek))_
* _1.5.1 - Missing files and require exceptions will now report instead of failing silently_
* _1.5.0 - Now takes multiple files for execution. (thanks to [abe33](https://github.com/abe33))_
* _1.4.0 - Optional flag to suppress stack trace on test failure (thanks to [Lastalas](https://github.com/Lastalas))_
* _1.3.1 - Fixed context for async tests (thanks to [omryn](https://github.com/omryn))_
* _1.3.0 - Added --config flag for changeable testing environments_
* _1.3.0 - Added `--config` flag for changeable testing environments_
* _1.2.3 - Fixed #179, #184, #198, #199. Fixes autotest, afterEach in requirejs, terminal reporter is in jasmine object, done function missing in async tests_
* _1.2.2 - Revert Exception Capturing to avoid Breaking Domain Tests_
* _1.2.1 - Emergency fix for path reference missing_
* _1.2.0 - Fixed #149, #152, #171, #181, #195. --autotest now works as expected, jasmine clock now responds to the fake ticking as requested, and removed the path.exists warning_
* _1.2.0 - Fixed #149, #152, #171, #181, #195. `--autotest` now works as expected, jasmine clock now responds to the fake ticking as requested, and removed the path.exists warning_
* _1.1.1 - Fixed #173, #169 (Blocks were not indented in verbose properly, added more documentation to address #180_
* _1.1.0 - Updated Jasmine to 1.3.1, fixed fs missing, catching uncaught exceptions, other fixes_
* _1.1.0 - Updated Jasmine to `1.3.1`, fixed fs missing, catching uncaught exceptions, other fixes_
10 changes: 5 additions & 5 deletions lib/jasmine-node/cli.js
Expand Up @@ -26,7 +26,7 @@ var isVerbose = false;
var showColors = true;
var teamcity = process.env.TEAMCITY_PROJECT_NAME || false;
var useRequireJs = false;
var extentions = "js";
var extensions = "js";
var match = '.';
var matchall = false;
var autotest = false;
Expand Down Expand Up @@ -65,7 +65,7 @@ while(args.length) {
break;
case '--coffee':
require('coffee-script');
extentions = "js|coffee|litcoffee";
extensions = "js|coffee|litcoffee";
break;
case '-m':
case '--match':
Expand Down Expand Up @@ -170,7 +170,7 @@ if (autotest) {

var patterns = ['**/*.js'];

if (extentions.indexOf("coffee") !== -1) {
if (extensions.indexOf("coffee") !== -1) {
patterns.push('**/*.coffee');
}

Expand Down Expand Up @@ -211,13 +211,13 @@ var onComplete = function(runner, log) {
if(useHelpers){
specFolders.forEach(function(path){
jasmine.loadHelpersInFolder(path,
new RegExp("helpers?\\.(" + extentions + ")$", 'i'));
new RegExp("helpers?\\.(" + extensions + ")$", 'i'));

})
}

try {
var regExpSpec = new RegExp(match + (matchall ? "" : "spec\\.") + "(" + extentions + ")$", 'i')
var regExpSpec = new RegExp(match + (matchall ? "" : "spec\\.") + "(" + extensions + ")$", 'i')
} catch (error) {
console.error("Failed to build spec-matching regex: " + error);
process.exit(2);
Expand Down

0 comments on commit 0ec1346

Please sign in to comment.