Test helper suite for Sails.js.
npm install sails-test-helperTest helper suite for Sails.js using Mocha test framework.
* node-test-helper
* mocha
* chai
* sinon
* sinon-chai
* supertest
* supertest-session
* sails-factory
``shLocal install
$ npm install sails-test-helper
Initialization
Copy test suite template to current directory.
`sh
Local install
$ node_modules/.bin/sails-test-helper initGlobal install
$ sails-test-helper init
`The following will be copied to the current working directory:
`
Makefile
test/
factories/
fixtures/
helpers/
unit/
`Writing Tests
$3
`javascript
//-- test/unit/controllers/SampleController.test.js
require("sails-test-helper");describe(TEST_NAME, function() {
describe("GET index", function() {
it("should be successful", function(done) {
request.get("/sample")
.expect(200)
.end(done);
});
});
});
`
_Execute SampleController test_
`
$ make test controllers/SampleController
GET index
✓ should be successful
1 passing
`
$3
`javascript
//-- test/unit/models/Sample.test.js
require("sails-test-helper");describe(TEST_NAME, function() {
describe(".create()", function() {
it("should be successful", function(done) {
Sample.create().exec(function(err, record) {
expect(err).to.not.exist;
expect(record).to.exist;
done();
});
});
});
});
`
_Execute Sample test_
`
$ make test models/Sample
.create()
✓ should be successful
1 passing
`
Test Execution
Tests are executed using _make_ command. Basically the script will look for tests to be executed in test/unit/ directory.
`sh
Run all tests
$ make testRun tests under a specific directory
This will run all tests under test/unit/controllers directory
$ make test controllersThis will run tests under test/unit/controllers and test/unit/models directories
$ make test controllers modelsRun a specific test file
This will run tests in test/unit/controllers/SampleController.test.js file
$ make test controllers/SampleController.test
`$3
Mocha options can be passed as parameter to _make_. By default, _mocha_ is being executed using the ff. options:
`sh
recursive with 30 second timeout using spec reporter
$ mocha --recursive -t 30000 -R spec
`Use MOCHA_OPTS commandline variable to pass specific _mocha_ options to _make_.
`sh
Dot format without colors. Useful for test execution on CI servers such as Jenkins.
$ make MOCHA_OPTS='-C -R dot' test
`Helpers
* TEST_NAME
* TEST_ROOT_PATH
* TEST_HELPERS_PATH
* TEST_FACTORIES_PATH
* TEST_FIXTURES_PATH
* requireHelper()
* sinon
* stub()
* mock()
* chai
* expect()
* should
* request
* xhr
* factory
Custom Helpers
You can write your own test helpers or node modules and save it under test/helpers/ directory. Use the built-in requireHelper() function to load your custom helper.
`javascript
//-- test/unit/services/SampleService.test.js
require("sails-test-helper");describe(TEST_NAME, function() {
it("should load my custom helper", function() {
var my_helper = requireHelper("my_helper");
expect(my_helper).to.exist;
});
});
`If you need to do some initialization prior to all your tests execution, you can put them inside test/helpers/bootstrap.js file. This file will be loaded automatically upon test execution.
`javascript
//-- test/helpers/bootstrap.js
//-- global variables can also be initialized here...before(function(done) {
//-- anything to run or initialize before running all tests...
done();
});
`Factories
You can use the built-in factory module to define, build or create factories.
`javascript
//-- test/unit/controllers/SampleController.test.js
require("sails-test-helper");describe(TEST_NAME, function() {
before(function(done) {
//-- define a factory
factory.define("sample")
.attr("id", 0, {auto_increment: true});
//-- create a record
factory.create("sample", function(sample) {
done();
});
});
describe("GET index", function() {
before(function(done) {
Sample.count(function(err, count) {
expect(err).to.not.exist;
expect(count).to.be.greaterThan(0);
done();
});
});
it("should be successful", function(done) {
request.get("/sample")
.expect(200)
.end(done);
});
});
});
`You can also load your factory definitions from test/factories/ directory through your local bootstrap file.
`javascript
//-- test/helpers/bootstrap.js
before(function(done) {
factory.load();
done();
});
``_Please see sails-factory for more details._