我正在node.js中编写一个应用程序,其中包含一些连接样式端点处理程序(function(req,resp)),并且想对它们编写一些单位测试,而无需完整应用程序正在运行。
我知道我可以"简单地"手动写入其中的任何固定装置,但是我想知道是否有任何库可以帮助我更快地生成这些固定装置。
编辑:为了进一步解释我想要的内容,我想在单元测试中执行处理程序(不是我的应用程序),为此,我需要一个假的REQ和RES。这些是我想嘲笑的两个对象。
我目前正在使用摩卡咖啡作为测试跑者和核心断言模块。
如果您以将app
传递到功能的方式定义了路线,则可以使用Supertest测试路线。
test
var app = require('./real-or-fixture-app'); //depends on your setup
require('routeToTest')(app);
var request = require("supertest");
describe("Test", function(){
it("should test a route", function(done){
request(app)
.post("/route")
.send({data:1})
.expect(200, done);
});
});
路由定义
module.exports = function(app){
app.get("/route", ....
};
我不太确定这确实是您想要的,但这是一种分别测试路线的方法。
我知道这个问题是旧的,但是现在这样做的好方法是supertest https://github.com/visionmedia/supertest
如果您曾经使用过Django Test客户端库,则它的工作原理很大。它模拟运行视图/路线,以便您获得测试方案更像是实际浏览器在您的视图上。这意味着将Req和Res被嘲笑,但以预期的方式行事。它比硒速度快(例如,使用封面下的Webdriver)。
。您可能知道,将尽可能多的逻辑从路线中移出是一个好主意,以便可以单独测试单元。我真的不考虑使用Supertest作为单元测试,因为您总是在测试一个单位的代码。
您可能对我组合在一起的小包装感兴趣,该软件包可以使用Sinon更轻松地创建模拟请求/响应。
本质上,它只是创建一个对象,该对象从Express中模拟标准的req
/res
,并用可以检查的SPY代替该方法。
来自Readme:
您的测试:
import route from '../src/foo'
import { mockReq, mockRes } from 'sinon-express-mock'
describe('my route', () => {
it('should foo the bar', () => {
const body = {
body: {
foo: 'bar',
},
}
const req = mockReq(body)
const res = mockRes()
route(req, res)
expect(res.json).to.be.calledWith({ foo: body.foo.bar })
})
})
src/foo.js
的内容:
export default (req, res) => {
res.json({ foo: req.body.bar })
}
https://github.com/danawoodman/sinon-express-mock