24

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

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

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

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

4

6 回答 6

7

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

于 2013-09-20T06:43:37.900 回答
6

从 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 作为开发依赖项:npm i -D jasmine@2
  2. 在您的项目中安装 supertest v3 作为开发依赖项:npm i -D supertest@3
  3. 使用创建初始 Jasmine 配置jasmine init(注意:如果您尚未完成运行此命令,则需要先全局安装 Jasmine)
  4. 创建以“Spec.js”结尾的规范(如ServerSpec.js

下面是 Jasmine 配置的样子:

项目/规范/支持/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"
  },
于 2017-06-08T22:28:43.540 回答
4

你应该试试http://frisbyjs.com/

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

于 2014-03-09T02:59:16.613 回答
1

也许你可以用mocha试试supertest

这是一个简单的例子:

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);
  })
})
于 2013-09-20T16:45:04.120 回答
1

您可以将 supertest 与 jasmine 一起使用,但您只需要手动传递错误。不久前,GitHub 项目上的一个问题是关于这个问题的。

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

于 2015-06-03T20:40:19.870 回答
1

你可以尝试在 Jasmine 中使用 supertest-as-promised。它对我有用: https ://github.com/WhoopInc/supertest-as-promised

这里有些例子:

在此处输入图像描述

在此处输入图像描述

于 2016-01-21T18:04:19.303 回答