This module is no longer maintained by StrongLoop/IBM.
We are encouraging the community to take the ownership of this module. Please open an issue in https://github.com/strongloop/loopback if you are willing to become the new maintainer.
See also https://groups.google.com/forum/#!topic/loopbackjs/w038RvqHeYI
#loopback-testing
Utilities for testing LoopBack apps
The following helpers are designed to generate [mocha] tests against LoopBack apps.
npm install 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
});