我正在学习Node.js和Express框架。我是茉莉花的忠实粉丝。所以我想尽可能地使用茉莉花,但是,我找不到用茉莉花测试Express的好方法。例如,我应该如何测试app.js中的路由?
如果我在app.js中有这条路线:
app.get('/', function(req, res) {
...
});
我如何使用茉莉花来测试它?
答案 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());
});
});
});
一些先决条件:
npm i -D jasmine@2
npm i -D supertest@3
jasmine init
创建初始Jasmine配置(注意:如果您还没有完成运行此命令,则需要首先全局安装Jasmine)ServerSpec.js
)以下是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项目的一个问题就此问题开始了。
答案 4 :(得分:1)
您可以尝试使用与Jasmine一样的supertest-promise。它对我有用: https://github.com/WhoopInc/supertest-as-promised
以下是一些例子:
答案 5 :(得分:0)
这是一个简单的例子:
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);
})
})