【发布时间】:2016-07-13 15:29:29
【问题描述】:
我有一个作为函数导出的服务模块。我需要将一些东西传递给它,比如配置对象,所以它确实需要保留这个结构。我试图从服务中提取一个函数,但无法弄清楚。在我的应用程序中,我有一个函数会在测试期间进行有问题的 API 调用,因此我想对它进行存根。 (我知道我必须以不同的方式编写测试来处理异步问题)
// myService.js
module.exports = function(config) {
function foo() {
returns 'bar';
}
return {
foo: foo
};
};
// test.js
var config = require('../../config');
var request = require('supertest');
var chai = require('chai');
var expect = chai.expect;
var sinon = require('sinon');
var myService = require('./myService.js')(config);
describe('Simple test', function(done) {
it('should expect "something else", function(done) {
var stub = sinon.stub(myService, 'foo').returns('something else');
request(server) // this object is passed into my test. I'm using Express
.get('/testRoute')
.expect(200)
.expect(function(res) {
expect(res.body).to.equal('something else');
stub.restore();
})
.end(done);
});
});
* /testRoute I set up as a simple GET route that simply returns the value from myService.foo()
上述方法不起作用,我认为这与我的服务导出方式有关。如果我按如下方式编写服务,则存根可以正常工作。
module.exports = {
test: function() {
return 'something';
}
};
但是,我需要能够将信息传递给模块,所以我想将我的模块保留在上面的原始结构中。有没有办法从以这种方式导出的模块中存根函数?我也在研究 proxyquire 但不确定这是否是答案。
【问题讨论】:
标签: node.js testing sinon stub