Utilities for testing LoopBack apps
Strongloop has deprecated the original loopback-testing. This repository is a fork made by iGLOO. Feel free to contribute!
The following helpers are designed to generate [mocha] tests against LoopBack apps.
npm install github:igloo-be/loopback-testing --save-dev
- Assuming you started with a clean template/project generated by
slc loopback
- If you have mocha installed as a global npm module that's great! Simply update
<your_project>/package.json
with:
```
{
...
"scripts": {
...
"test": "mocha"
}
}
```
- Otherwise, you can utilize the mocha library within the
loopback-testing
testing module:
```
{
...
"scripts": {
...
"test": "./node_modules/loopback-testing/node_modules/.bin/mocha"
}
}
```
- Run
npm test
to execute any tests under thetest
directory.
Below is a simple LoopBack app.
var loopback = require('loopback');
var app = loopback();
var Product = app.model('product');
Product.attachTo(loopback.memory());
Use the loopback-testing
module to generate mocha
tests.
var lt = require('loopback-testing');
var assert = require('assert');
var app = require('../server/server.js'); //path to app.js or server.js
describe('/products', function() {
lt.beforeEach.withApp(app);
lt.describe.whenCalledRemotely('GET', '/products', function() {
lt.it.shouldBeAllowed();
it('should have statusCode 200', function() {
assert.equal(this.res.statusCode, 200);
});
lt.beforeEach.givenModel('product');
it('should respond with an array of products', function() {
assert(Array.isArray(this.res.body));
});
});
});
Use TestDataBuilder to build many Model instances in one async call. Specify only properties relevant to your test, the builder will pre-fill remaining required properties with sensible defaults.
var TestDataBuilder = require('loopback-testing').TestDataBuilder;
var ref = TestDataBuilder.ref;
// The context object to hold the created models.
// You can use `this` in mocha test instead.
var context = {};
var ref = TestDataBuilder.ref;
new TestDataBuilder()
.define('application', Application, {
pushSettings: { stub: { } }
})
.define('device', Device, {
// use the value of application's id
// the value is resolved at build time
appId: ref('application.id'),
deviceType: 'android'
})
.define('notification', Notification)
.buildTo(context, function(err) {
// test models are available as
// context.application
// context.device
// context.notification
});
describe
it
beforeEach
TestDataBuilder
staticMethod
instanceMethod
whenCalledRemotely
whenLoggedInAsUser
whenLoggedInAsUserWithRole
whenCalledByUser
whenCalledByUserWithRole
whenCalledAnonymously
whenCalledUnauthenticated
shouldBeAllowed
shouldBeDenied
shouldNotBeFound
shouldBeForbidden
shouldBeRejected
shouldBeAllowedWhenCalledAnonymously
shouldBeDeniedWhenCalledAnonymously
shouldBeAllowedWhenCalledUnauthenticated
shouldBeDeniedWhenCalledUnauthenticated
shouldBeAllowedWhenCalledByUser
shouldBeDeniedWhenCalledByUser
shouldBeAllowedWhenCalledByUserWithRole
shouldBeDeniedWhenCalledByUserWithRole
withApp
withArgs
givenModel
givenUser
givenUserWithRole
givenLoggedInUser
givenLoggedInUserWithRole
givenAnUnauthenticatedToken
givenAnAnonymousToken