我有以下测试:(简化)
var request = require('request');
var routes = require('../routes.js');
describe('routes', function() {
var req, res;
beforeEach(function(){
req = { headers: {}, url: 'http://127.0.0.1', params: {} };
res = {
sendFile: function() { return '' },
render: function() { return '' },
json: function() { return {} }
};
jasmine.createSpy(request, 'get')
});
it('should render static page', function() {
routes.show(req, res);
expect(request.get).toHaveBeenCalled();
})
});
和routes.js内容:
module.exports = {
show: function(req, res) {
request.get(apiUrl('v1/users/' + req.params.name), apiErrorsHandler(function(body) {
res.render('users/show.jade', body);
}, function() {
res.json({});
}));
}
}
如果重要的话,我正在使用gulp-jasmine
,但即使我使用jasmine-node
,问题也会发生。
每次运行测试时都会收到以下错误:
Error: Expected a spy, but got Function.
在线:
expect(request.get).toHaveBeenCalled();
你知道为什么会这样吗?
我尝试过以下解决方案:Expected a spy, but got Function但没有成功,因为.get
已直接附加到request
,因此引用为undefined
。
答案 0 :(得分:0)
jasmine.createSpy不能那样工作..
您想要的是创建一个间谍并将其分配给请求对象的get属性。
req = { headers: {}, url: 'http://127.0.0.1', params: {}, get: jasmine.createSpy('reqGetSpy')};