我有一个问题让Sinon的存根工作正常工作。当我存根list
在retro
并且测试运行时,app.get('/retro', retro.list)
正在执行原始功能retro.list
而不是存根。由于出现这种情况,因为测试存根的callCount
为0原函数被调用而不是stub
我更熟悉的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'返回?它是一个普通对象还是一个新创建的实例? – mor
尝试这个'retro.list.callCount.should.equal(1);' –
@mor我包括'复古。js'所以你可以看到它返回的对象。这不是一个实例。我正在考虑导出一个实例并试图对原型进行存根,但是这种方法的效果并不好。 – kmanzana