簡體   English   中英

是否有一個模塊可以輕松模擬req / res對象,以便對連接樣式處理程序進行單元測試?

[英]Is there a module to easily mock req/res objects for unit testing a connect style handler?

我正在node.js中編寫一個應用程序,其中包含一些連接樣式端點處理程序(函數(req,resp)),並且希望針對它們編寫一些單元測試,而不需要運行完整的應用程序。

我知道我可以“簡單地”推送我手動寫入的任何夾具,但我想知道是否有任何庫可以幫助我更快地生成這些夾具。

編輯:為了進一步解釋我想要的東西,我想在我的單元測試中只執行我的處理程序(不是我的應用程序),為此,我需要一個假的req和res。 那些是我想嘲笑的兩個對象。

我目前正在使用mocha作為測試運行器和核心斷言模塊。

如果您以將app傳遞給函數的方式定義路徑,則可以使用supertest來測試路徑。

測試

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測試客戶端庫,那么它的工作方式非常類似。 它模擬運行您的視圖/路徑,以便您獲得更像測試場景,如果實際的瀏覽器正在訪問您的視圖。 這意味着req和res被嘲笑,但是以預期的方式運行。 它比Selenium更快(或者,例如,量角器,它使用了Webdriver)。

正如您可能知道的那樣,將您的邏輯移出您的路線是一個好主意,以便可以單獨進行單元測試。 我並不真的考慮使用Supertest作為單元測試,因為你總是測試不止一個代碼單元。

您可能對我放在一起的小包感興趣,這使得使用Sinon創建模擬請求/響應更容易一些。

本質上它只是創建一個模仿來自express的標准req / res的對象,並用你可以檢查的spys替換該方法。

來自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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM