Reputation: 297
I am learning Node.js and Express framework. I am a big fan of jasmine. So I want to use jasmine whenever I can, however, I can't find a good way testing Express with jasmine. For example, how should I test a route in app.js?
If I have this route in app.js:
app.get('/', function(req, res) {
...
});
How can I use jasmine to test it?
Upvotes: 25
Views: 16750
Reputation: 1764
Jasmine-node makes it easy to use jasmine with node.js. There are some examples on their site. Another example can be found from http://blog.drewolson.org/post/14684497867/ web.archive.org
Upvotes: 7
Reputation: 54812
Since Jasmine 2 it is very simple to use Jasmine in a Node.js environment. To test express apps with it, I recommend to use Jasmine in combination with supertest.
Here is how such a test looks like:
project/spec/ServerSpec.json
const request = require('supertest');
const app = require('../app');
describe('Server', () => {
describe('REST API v1', () => {
it('returns a JSON payload', (done) => {
request(app)
.get('/rest/service/v1/categories')
.expect(200)
.expect('Content-Type', 'application/json; charset=utf-8')
.end((error) => (error) ? done.fail(error) : done());
});
});
});
Some prerequisites:
npm i -D jasmine@2
npm i -D supertest@3
jasmine init
(Note: You need to install Jasmine globally first if you haven't done already to run this command)ServerSpec.js
)Here is how a Jasmine configuration looks like:
project/spec/support/jasmine.json
{
"helpers": [
"helpers/**/*.js"
],
"random": false,
"spec_dir": "spec",
"spec_files": [
"**/*[sS]pec.js"
],
"stopSpecOnExpectationFailure": false
}
To run your specifications (test suites) simply add this to your npm scripts and execute npm test
(or just npm t
):
"scripts": {
"test": "jasmine"
},
Upvotes: 8
Reputation: 1993
You can try using supertest-as-promised with Jasmine. It is working for me: https://github.com/WhoopInc/supertest-as-promised
Here are some examples:
Upvotes: 1
Reputation: 3333
You can use supertest with jasmine but you'll just need to manually pass errors. An issue on GitHub project was opened about this a while ago.
https://github.com/jasmine/jasmine-npm/issues/31
Upvotes: 1
Reputation: 1722
You should try out http://frisbyjs.com/
I haven't had a chance to use it, but as I was looking for a solution to the same problem, this was the best I could find.
Upvotes: 4
Reputation: 878
Maybe you could try supertest with mocha.
Here's a simple example :
var request = require('supertest')
, express = require('express');
var app = express();
app.get('/user', function(req, res){
res.send(200, { name: 'toto' });
});
describe('GET /user', function(){
it('should respond with json', function(done){
request(app)
.get('/user')
.set('Accept', 'application/json')
.expect('Content-Type', 'json')
.expect(200, done);
})
})
Upvotes: 1