Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Use jasmine to test Express.js

Tags:

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?

like image 647
user2730490 Avatar asked Sep 20 '13 06:09

user2730490


People also ask

How do I test node js with Jasmine?

Fortunately there exists the npm package jasmine-node which makes Jasmine available for node. js apps as well. You can give jasmine-node a try by running npm install jasmine-node -g . This will install jasmine-node globally, so we're able to run jasmine-node from the command line.

Can Jasmine test standalone JavaScript code?

Jasmine can be used as a standalone application where you download the framework and put your JavaScript files inside the src folder. Then you write the test files (often called "specs") and put them in the spec folder.


1 Answers

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"   }, 
like image 145
Benny Neugebauer Avatar answered Sep 23 '22 01:09

Benny Neugebauer