kma*_*ana 4 javascript stub mocha.js express sinon
我有一个问题让Sinon的存根正常工作.当我存根list上retro和试运行,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();
})
})
})
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
retro.js:
var retro = {
list: function(req, res){
console.log('actual called');
res.send("respond with a resource");
}
}
module.exports = retro;
Run Code Online (Sandbox Code Playgroud)
在需要/创建存根之前,您可能需要创建存根app.
var request = require('supertest')
, sinon = require('sinon')
, retro = require('../routes/retro');
var stubRetroList = sinon.stub(retro, 'list');
var app = require('../app');
// ...
stubRetroList.callCount.should.equal(1);
Run Code Online (Sandbox Code Playgroud)
这允许retro.list在传递到路线之前进行更新:
app.get('/retro', retro.list);
Run Code Online (Sandbox Code Playgroud)
问题可能是因为retro.list不是通过引用传递(指针),而是通过值传递(复制)的引用.因此,虽然sinon.stub()正在改变retro.list,但它不会影响'/retro'路线已经拥有的副本.
| 归档时间: |
|
| 查看次数: |
2103 次 |
| 最近记录: |