茉莉花单元测试 Angular-Cookie
Jasmine Unit Test Angular-Cookie
我在测试 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)
按预期工作。我究竟该如何测试这两种方法?
我还没有找到一种可以让我测试其所有方法的监视 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);
基于 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()
}));
});
我在测试 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)
按预期工作。我究竟该如何测试这两种方法?
我还没有找到一种可以让我测试其所有方法的监视 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);
基于 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()
}));
});