【发布时间】:2013-08-03 01:57:39
【问题描述】:
我在让诗乃的存根正常工作时遇到问题。当我在retro 上存根list 并运行测试时,app.get('/retro', retro.list) 正在执行原始函数retro.list 而不是存根。由于发生这种情况,测试失败,因为存根的callCount 为 0。
我对coffeescript 更熟悉,而且我也以同样的方式存根。关于 Javascript 的作用域,或者require('../routes/retro') 的工作原理,或者retro 与app.js 和test.js 中的不同,我是否有什么不明白的地方。
非常感谢下面的帮助和代码。
test.js:
var request = require('supertest')
, retro = require('../routes/retro')
, app = require('../app')
, sinon = require('sinon');
require('should');
describe('GET /retro', function() {
// less involved, but maybe stupid to test
it('should call retro.list', function(done) {
var stub = sinon.stub(retro, 'list');
request(app)
.get('/retro')
.end(function(err, res){
stub.callCount.should.equal(1);
if (err) return done(err);
done();
})
})
})
app.js:
var express = require('express')
, config = require('./config')
, routes = require('./routes')
, retro = require('./routes/retro');
var app = express();
config(app);
app.get('/', routes.index);
app.get('/retro', retro.list);
module.exports = app;
retro.js:
var retro = {
list: function(req, res){
console.log('actual called');
res.send("respond with a resource");
}
}
module.exports = retro;
【问题讨论】:
-
retro返回什么?它是普通对象还是新创建的实例? -
试试这个
retro.list.callCount.should.equal(1); -
@mor 我包含了
retro.js,所以你可以看到它返回的对象。它不是一个实例。我正在考虑导出一个实例并尝试对原型进行存根,但这也不是很好。 -
@Sushanth-- 我尝试了您的建议,但
sinon.stub(retro, 'list')在retro.list返回存根,因此它们是同一个对象,运行该代码会产生相同的问题。不过感谢您的建议
标签: javascript express mocha.js stub sinon