Jasmine不会在函数上创建间谍

时间:2014-11-03 10:35:19

标签: node.js jasmine

我有以下测试:(简化

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

1 个答案:

答案 0 :(得分:0)

jasmine.createSpy不能那样工作..

您想要的是创建一个间谍并将其分配给请求对象的get属性。

req = { headers: {}, url: 'http://127.0.0.1', params: {}, get: jasmine.createSpy('reqGetSpy')};