Use jasmine to test Express.js

15,284

Solution 1

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

Solution 2

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:

  1. Install Jasmine v2 as dev dependency in your project: npm i -D jasmine@2
  2. Install supertest v3 as dev dependency in your project: npm i -D supertest@3
  3. Create an initial Jasmine configuration using jasmine init (Note: You need to install Jasmine globally first if you haven't done already to run this command)
  4. Create a specification ending on "Spec.js" (like 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"
  },

Solution 3

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.

Solution 4

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);
  })
})

Solution 5

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:

enter image description here

enter image description here

Share:
15,284
user2730490
Author by

user2730490

Updated on June 14, 2022

Comments

  • user2730490
    user2730490 about 2 years

    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?