是否有一个模块可以轻松模拟REQ/RES对象,以测试连接样式处理程序



我正在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

最新更新