gpt4 book ai didi

unit-testing - 使用依赖项测试 AngularJS 服务

转载 作者:行者123 更新时间:2023-12-04 04:50:32 25 4
gpt4 key购买 nike

我在 AngularJS 中测试一个简单的服务时遇到了一些问题,该服务依赖于另一个服务。

该服务看起来有点像这样:

serviceModule.factory('filtersService', ['$rootScope', 'urlService', function($rootScope, urlService){
return {
getFilters: function(){
if(urlService.getPathName() == "test")
{
return "something";
}
}]);

一开始我只是尝试使用 window.location.pathname 而不是创建服务,但它似乎是能够模拟它的错误方式。因此,我创建了 urlService,它基本上是一个围绕窗口对象的简单包装器。

然后我有我的 filtersServiceTest ,它看起来像这样:
describe('filtersService test', function(){
var filtersService, urlServiceMock;

beforeEach(module('App.services'));

beforeEach(function(){
urlServiceMock = {
getPathName: function(){
return "";
}
};

module(function($provide){
$provide.value('urlService', urlServiceMock);
});
});

it('Should return something if url is test', inject(function(filtersService){
urlServiceMock = {
getPathName: function(){
return "test";
}
};

expect(filtersService.getFilters()).not.toBe("something");
}));
});

但这似乎不起作用。在实际运行之前,我无法重载 urlServiceMock。我可以更改' beforeEach ' 每个所以 getPathName 返回“test”,但是我将无法测试 url 不等于 test 的场景。

最佳答案

您可以监视测试套件中的服务以更改行为:

spyOn(yourService, 'methodName');

jsFiddle 上有一个关于如何实现 spy 的很好的例子: http://jsfiddle.net/robinroestenburg/aDwva/

这应该可以让您正常工作。

关于unit-testing - 使用依赖项测试 AngularJS 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123227/

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