使用Jasmine测试Express.js

25

我正在学习Node.js和Express框架。我非常喜欢Jasmine。因此,我希望能够在任何时候都使用Jasmine进行测试,但是,我无法找到一个好的方式来使用Jasmine测试Express。例如,我应该如何测试app.js中的路由?

如果我在app.js中有这个路由:

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

我如何使用Jasmine来测试它?

6个回答

8

自从Jasmine 2推出以来,在Node.js环境中使用Jasmine非常简单。为了使用Jasmine测试express应用程序,我建议与supertest结合使用。

以下是这样一个测试的样子:

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

一些前提条件:

  1. 在你的项目中将Jasmine v2作为开发依赖项安装:npm i -D jasmine@2
  2. 在你的项目中将supertest v3作为开发依赖项安装:npm i -D supertest@3
  3. 使用jasmine init创建一个初始的Jasmine配置(注:如果您还没有全局安装Jasmine,则需要先进行安装才能运行此命令)
  4. 创建一个以"Spec.js"结尾的规范文件(如ServerSpec.js

以下是Jasmine配置的示例:

project/spec/support/jasmine.json

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

要运行您的规范(测试套件),只需将此添加到 npm脚本 中并执行npm test(或仅执行npm t):

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

如果有人遇到“const app = require('../../app');”的问题,您需要导出包含应用程序的对象,以修复测试错误:“const app = require('../../app').app;”。 - fetahokey

7

你的链接无效。 - EugenSunic
感谢提供信息。已添加存档版本的链接。 - Matti Lehtinen

4

你应该尝试使用 http://frisbyjs.com/

虽然我还没有使用过它,但当我在寻找解决方案时,这是我能找到的最好的选择。


1
Marketcloud,我们使用frisbyjs测试我们的expressjs api部署,并且我们对它感到非常满意 :) - fat

1

也许你可以尝试使用supertestmocha进行编程。

这里有一个简单的例子:

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

2
我认为supertest也可以很容易地与jasmine一起使用,所以你的建议可能会有帮助,而且没有必要将其连接到mocha。 - Ph0en1x
13
他说他爱茉莉花。他要求提供一个与茉莉花有关的解决方案。这个答案提供了一个与摩卡有关的解决方案。摩卡并不是茉莉花。 - rowanu

1

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接