gpt4 book ai didi

angularjs - 如何模拟 $window 来单元测试 AngularJS 服务?

转载 作者:行者123 更新时间:2023-12-02 23:52:54 25 4
gpt4 key购买 nike

这是我的服务:

var services = angular.module('amdotcom.services', ['ngResource']);

services.factory('homePageRes', ['$resource', '$window',
function ($resource, $window) {
var wdw = angular.element($window);
return $resource('home/index', {
height: wdw.height(),
width: wdw.width()
});
}]);

services.factory('homePageLoader', ['homePageRes', '$q',
function (homePageRes, $q) {
return function () {
var delay = $q.defer();
homePageRes.get(function (homePage) {
delay.resolve(homePage);
}, function () {
delay.reject('Unable to fetch home page');
});
return delay.promise;
};
}]);

下面是我在引入 $window 服务之前的测试。这些测试当时工作得很好,但是一旦我引入了 $window 服务,我就无法模拟它了。

describe('Services', function () {

beforeEach(function () {
module("amdotcom.services");
});

describe('homePageLoader', function () {
var mockBackend, loader;

beforeEach(inject(function ($httpBackend, homePageLoader) {
mockBackend = $httpBackend;
loader = homePageLoader;
}));

it('should return home page information', function () {
mockBackend.expectGET('home/index?height=400&width=500').respond({ "Albums": [{ "Id": 2, "Name": "best shots" }] });

var homePageData;

var promise = loader();
promise.then(function (homePg) {
homePageData = homePg;
});

expect(homePageData).toBeUndefined();

mockBackend.flush();

expect(homePageData.Albums[0].Id).toEqual(2);
expect(homePageData.Albums[0].Name).toEqual("best shots");
});

afterEach(function () {
mockBackend.verifyNoOutstandingExpectation();
mockBackend.verifyNoOutstandingRequest();
});
});
});

我收到错误消息:TypeError: 'undefined' is not a function (evaluating 'wdw.height()')

我尝试使用$provider和spyOn方法,但没有一个起作用。请帮忙。

阿伦

最佳答案

显然 height() 和 width() 函数不正确。我将它们更改为innerHeight 和innerWidth 属性。

services.factory('homePageRes', ['$resource', '$window',
function ($resource, $window) {
return $resource('home/index', {
height: $window.innerHeight,
width: $window.innerWidth
});
}]);

beforeEach(function () {
angular.mock.module("amdotcom.services", function ($provide) {
var myMock = {
innerHeight: 400,
innerWidth: 500
};
$provide.value('$window', myMock);
});
});

由于我上面的评论没有格式化且可读性较差,因此我在此处再次添加了它。

关于angularjs - 如何模拟 $window 来单元测试 AngularJS 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23719175/

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