我正在学习 Node.js 和 Express 框架。我是茉莉花的忠实粉丝。所以我想尽可能地使用 jasmine,但是,我找不到用 jasmine 测试 Express 的好方法。例如,我应该如何在 app.js 中测试路由?
如果我在 app.js 中有这条路线:
app.get('/', function(req, res) {
...
});
我如何使用茉莉花来测试它?
Jasmine-node让 jasmine 与 node.js 一起使用变得很容易。他们的网站上有一些例子。另一个例子可以从http://blog.drewolson.org/post/14684497867/web.archive.org 找到
从 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());
});
});
});
一些先决条件:
npm i -D jasmine@2
npm i -D supertest@3
jasmine init
(注意:如果您尚未完成运行此命令,则需要先全局安装 Jasmine)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"
},
你应该试试http://frisbyjs.com/
我没有机会使用它,但是当我正在寻找解决同一问题的方法时,这是我能找到的最好的。
这是一个简单的例子:
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);
})
})
您可以将 supertest 与 jasmine 一起使用,但您只需要手动传递错误。不久前,GitHub 项目上的一个问题是关于这个问题的。
你可以尝试在 Jasmine 中使用 supertest-as-promised。它对我有用: https ://github.com/WhoopInc/supertest-as-promised
这里有些例子: