gpt4 book ai didi

angularjs - 用 Angular 模拟 Cookie

转载 作者:行者123 更新时间:2023-12-02 11:19:39 25 4
gpt4 key购买 nike

在我的主要 describe我有以下内容:

beforeEach(inject(function(...) {
var mockCookieService = {
_cookies: {},
get: function(key) {
return this._cookies[key];
},
put: function(key, value) {
this._cookies[key] = value;
}
}

cookieService = mockCookieService;

mainCtrl = $controller('MainCtrl', {
...
$cookieStore: cookieService
}
}

稍后我想测试 Controller 如何相信 cookie 是否已经存在,所以我嵌套了以下描述:
describe('If the cookie already exists', function() {
beforeEach(function() {
cookieService.put('myUUID', 'TEST');
});

it('Should do not retrieve UUID from server', function() {
expect(userService.getNewUUID).not.toHaveBeenCalled();
});
});

但是,当我对 cookieService 进行更改时它不会持续到正在创建的 Controller 中。我采取了错误的方法吗?

谢谢!

编辑:更新了测试代码,这就是我使用 $cookieStore 的方式:
var app = angular.module('MyApp', ['UserService', 'ngCookies']);

app.controller('MainCtrl', function ($scope, UserService, $cookieStore) {
var uuid = $cookieStore.get('myUUID');

if (typeof uuid == 'undefined') {
UserService.getNewUUID().$then(function(response) {
uuid = response.data.uuid;
$cookieStore.put('myUUID', uuid);
});
}

});

最佳答案

您的单元测试不必创建一个模拟 $cookieStore 并从本质上重新实现其功能。您可以使用 Jasmine 的 spyOn函数创建一个 spy 对象并返回值。

创建 stub 对象

var cookieStoreStub = {};

在创建 Controller 之前设置你的 spy 对象
spyOn(cookieStoreStub, 'get').and.returnValue('TEST'); //Valid syntax in Jasmine 2.0+. 1.3 uses andReturnValue()

mainCtrl = $controller('MainCtrl', {
...
$cookieStore: cookieStoreStub
}

为 cookie 可用的场景编写单元测试
describe('If the cookie already exists', function() {
it('Should not retrieve UUID from server', function() {
console.log(cookieStore.get('myUUID')); //Returns TEST, regardless of 'key'
expect(userService.getNewUUID).not.toHaveBeenCalled();
});
});

注意:如果您想测试多个 cookieStore.get()在场景中,您可能希望将 Controller 的创建移至 beforeEach()里面 describe()堵塞。这允许您调用 spyOn()并返回一个适合于描述 block 的值。

关于angularjs - 用 Angular 模拟 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19103927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com