我有一個問題讓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