茉莉花单元测试Angular-Cookie

时间:2015-02-02 22:56:11

标签: angularjs jasmine

我在测试angular-cookie模块时遇到了麻烦。这是因为'GET'方法实现的奇怪方式,与其他方法相比(请注意'GET'方法没有方法声明):

ipCookie(cookieName)         // GET
ipCookie.remove(cookieName)  // DELETE

结果,以下代码:

var ipCookie = jasmine.createSpyObj('ipCookie', ['remove'])
ipCookie.and.returnValue(true)

信息失败:

TypeError: 'undefined' is not an object (evaluating 'ipCookie.and.returnValue')

代码:

var ipCookie = jasmine.createSpyObj('ipCookie', ['remove'])
ipCookie.remove.and.returnValue(true)

按预期工作。我究竟如何测试这两种方法?

2 个答案:

答案 0 :(得分:2)

基于Cristian的答案,我能够在一个模拟对象上模拟getdelete方法。

describe('Service: service', function() {
  var ipCookieSpy;

  beforeEach(module('app', function($provide) {
    ipCookieSpy = jasmine.createSpy('ipCookieGet');
    ipCookieSpy.remove = jasmine.createSpy('ipCookieRemove');
    $provide.value('ipCookie', ipCookieSpy);
  }));

  it('Sanity checks the ipCookie spy', inject(function(ipCookie) {
    ipCookie();
    expect(ipCookieSpy).toHaveBeenCalled();
    ipCookie.remove();
    expect(ipCookieSpy.remove).toHaveBeenCalled()
  }));
});

答案 1 :(得分:1)

我无法找到一种方法来监视ipCookie,这可以让我测试它的所有'方法。为了测试“GET”和“DELETE”方法,我将测试套件分成2个,并在模块上实现了2种不同的间谍方式。

第一个测试套件允许我测试模块的方法:

describe('Service: service', function () {
  beforeEach(module('app', function ($provide) {
    $provide.value('ipCookie', jasmine.createSpyObj('ipCookie', ['remove']));
  }));

用法:expect(ipCookie.remove).toHaveBeenCalledWith('cookieName');

第二个测试套件允许我模拟模块的无名“GET”方法:

describe('Service: service', function () {
  beforeEach(module('app', function ($provide) {
    $provide.value('ipCookie', jasmine.createSpy('ipCookie'));
  }));

用法:ipCookie.and.returnValue(mockCookie);