我在使用Sinon的stub时遇到了问题。当我对retro中的list进行stub处理,而测试运行时,app.get('/retro', retro.list)执行原始函数retro.list而不是stub。由于出现这种情况,测试失败,因为stub的callCount为0。
我更熟悉coffeescript,并且以同样的方式进行了存根处理。我是否没有理解Javascript的作用域,或者require('../routes/retro')如何工作,或者retro在app.js和test.js中不相同。
非常感谢你的帮助和以下代码。
test.js:
我更熟悉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
返回什么?它是一个普通对象还是一个新创建的实例? - morretro.list.callCount.should.equal(1);
- Sushanth --retro.js
,这样你就可以看到它返回的对象。它不是一个实例。我曾考虑过导出一个实例并尝试存根原型,但那也没有很好地工作。 - kmanzanasinon.stub(retro, 'list')
返回的存根在retro.list
上,因此它们是相同的对象,运行该代码会产生相同的问题。不过还是谢谢你的建议。 - kmanzana