2.3 KiB
Testing
Strapi's test suite is written using mocha and although Strapi doesn't impose any testing framework for your apps, in this example we will setup tests using the mocha framework.
Setup
Before writing tests, you should setup a basic directory structure, like this:
./strapiApp
├── api/
├── ...
├── test/
│ ├── integration/
│ │ ├── controllers/
│ │ │ └── my_endpoint.test.js
│ │ ├── models/
│ │ │ └── my_model.test.js
│ │ └── ...
| ├── ...
│ ├── bootstrap.js
Boostrap
We are going to setup a bootstrap.js
with before
and after
hooks to
perform any actions before and after our tests.
In this example, the app server is started before running any tests an stop
the server after tests are completed.
./test/bootstrap.js
const strapi = require('strapi');
before(function (done) {
strapi.start({}, function(err) {
if (err) {
return done(err);
}
done(err, strapi);
});
});
after(function (done) {
strapi.stop(done());
});
Writing tests
Once you have setup your directory structure, you can start writing your tests.
In this example we use co-supertest,
a co
and Supertest
integration library.
Supertest provides several useful
methods for testing HTTP requests.
If you want to test an api endpoint, you can do it like this:
./test/integration/controllers/my_endpoint.js
const request = require('co-supertest');
describe('MyEndpoint Controller Integration', function() {
describe('GET /my_endpoint', function() {
it('should return 200 status code', function *() {
yield request(strapi.config.url)
.get('/my_endpoint')
.expect(200)
.expect('Content-Type', /json/)
.end();
});
});
});
Running tests
In order to run tests you can use npm test
. In your package.json
, in the
scripts
section, add this:
./package.json
"scripts": {
"test": "mocha --require co-mocha test/bootstrap.js test/**/*.test.js"
}
Remember to run test/bootstrap.js
before any other tests and, if you want,
use the --require
option to pass any required dependencies you need available
in your tests.