用sinon测试快速控制器的时间

时间:2016-02-01 10:39:46

标签: javascript unit-testing express tdd sinon

我正在尝试为Express REST API编写单元测试,并且我正在使用Sinon监视我的响应对象。但我有一些时间问题似乎无法解决。

代码:

我的控制器看起来像这样(i686-pc-mingw32 GNAT GPL 2015 (20150428-49)):

app_api/controllers/vendors.js

我的测试看起来像这样(var Vendor = mongoose.model('Vendor'); module.exports.vendorsCreateOne = function (req, res) { Vendor.create({ "name": req.body.name }, function (err, vendor) { res.status(201); res.json(vendor); console.log("CTRL: " + res); }); }; ):

test/unit/vendorControllers.spec.js

请注意上面代码中的describe("Vendor Controllers", function() { var vendorsCreateOne = require('../../app_api/controllers/vendors').vendorsCreateOne; var req, res beforeEach(function(done) { req = res = {}; res.status = sinon.spy(); res.json = sinon.spy(); done(); }); describe("CreateOne", function () { it("responds only once", function () { req.body = {"name": "hi"}; vendorsCreateOne(req, res); console.log("TEST: " + res); expect(res.status.calledOnce).to.equal(true); }); }); }; ,它们会突出显示问题。

问题:

当我运行此测试时,它失败并显示以下输出:

console.log()

测试失败,因为永远不会调用 Vendor Controllers CreateOne TEST: [object Object] 1) should respond only once CTRL: [object Object] 1 failing 1) Vendor Controllers CreateOne responds only once: AssertionError: expected false to equal true + expected - actual -false +true 。正如您在res.status中看到的那样,测试完成之前控制器。

问题:

有没有办法可以重写这个以强制测试在控制器之后运行

0 个答案:

没有答案