我在测试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)
按预期工作。我究竟如何测试这两种方法?
答案 0 :(得分:2)
基于Cristian的答案,我能够在一个模拟对象上模拟get
和delete
方法。
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);