使用jasmine来测试Express.js

时间:2013-09-20 06:24:19

标签: node.js express jasmine

我正在学习Node.js和Express框架。我是茉莉花的忠实粉丝。所以我想尽可能地使用茉莉花,但是,我找不到用茉莉花测试Express的好方法。例如,我应该如何测试app.js中的路由?

如果我在app.js中有这条路线:

app.get('/', function(req, res) {
  ...
});

我如何使用茉莉花来测试它?

6 个答案:

答案 0 :(得分:7)

Jasmine-node可以让jasmine与node.js一起使用。他们的网站上有一些例子。另一个例子可以从 http://blog.drewolson.org/post/14684497867/ web.archive.org

找到

答案 1 :(得分:4)

您应该尝试http://frisbyjs.com/

我没有机会使用它,但在我寻找解决同一问题的方法时,这是我能找到的最好的。

答案 2 :(得分:3)

从Jasmine 2开始,在Node.js环境中使用Jasmine非常简单。要使用它测试express个应用,我建议将Jasmine与supertest结合使用。

以下是这样的测试结果:

<强>项目/规格/ 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());
    });
  });
});

一些先决条件:

  1. 在项目中将Jasmine v2作为dev依赖项安装:npm i -D jasmine@2
  2. 在项目中将supertest v3作为dev依赖项安装:npm i -D supertest@3
  3. 使用jasmine init创建初始Jasmine配置(注意:如果您还没有完成运行此命令,则需要首先全局安装Jasmine)
  4. 创建一个以&#34; Spec.js&#34;结尾的规范(如ServerSpec.js
  5. 以下是Jasmine配置的外观:

    <强>项目/规格/支持/ jasmine.json

    {
      "helpers": [
        "helpers/**/*.js"
      ],
      "random": false,
      "spec_dir": "spec",
      "spec_files": [
        "**/*[sS]pec.js"
      ],
      "stopSpecOnExpectationFailure": false
    }
    

    要运行您的规范(测试套件),只需将其添加到npm scripts并执行npm test(或只是npm t):

      "scripts": {
        "test": "jasmine"
      },
    

答案 3 :(得分:1)

你可以使用supertest和jasmine,但你只需要手动传递错误。关于GitHub项目的一个问题就此问题开始了。

https://github.com/jasmine/jasmine-npm/issues/31

答案 4 :(得分:1)

您可以尝试使用与Jasmine一样的supertest-promise。它对我有用: https://github.com/WhoopInc/supertest-as-promised

以下是一些例子:

enter image description here

enter image description here

答案 5 :(得分:0)

也许您可以使用supertest尝试mocha

这是一个简单的例子:

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