gpt4 book ai didi

javascript - Jasmine angularjs - 监视 Controller 初始化时调用的方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:36:09 26 4
gpt4 key购买 nike

我目前正在使用 Jasmine 与 Karma(Testacular) 和 Web Storm 来编写单元测试。我无法监视 Controller 初始化时立即调用的方法。是否可以监视 Controller 初始化时调用的方法?

我的 Controller 代码,我试图监视的方法是 getServicesNodeList()

myApp.controller('TreeViewController', function ($scope, $rootScope ,$document, DataServices) {
$scope.treeCollection = DataServices.getServicesNodeList();
$rootScope.viewportHeight = ($document.height() - 100) + 'px';
});

这是测试规范:

describe("DataServices Controllers - ", function () {

beforeEach(angular.mock.module('myApp'));
describe("DataServicesTreeview Controller - ", function () {


beforeEach(inject(function ($controller, $rootScope, $document, $httpBackend, DataServices) {
scope = $rootScope.$new(),
doc = $document,
rootScope = $rootScope;
dataServices = DataServices;

$httpBackend.when('GET', '/scripts/internal/servicedata/services.json').respond(...);

var controller = $controller('TreeViewController', {$scope: scope, $rootScope: rootScope, $document: doc, DataServices: dataServices });

$httpBackend.flush();
}));

afterEach(inject(function($httpBackend){
$httpBackend.verifyNoOutstandingExpectation();
$httpBackend.verifyNoOutstandingRequest();
}));

it('should ensure DataServices.getServicesNodeList() was called', inject(function ($httpBackend, DataServices) {
spyOn(DataServices, "getServicesNodeList").andCallThrough();

$httpBackend.flush();
expect(DataServices.getServicesNodeList).toHaveBeenCalled();
}));


});
});

测试失败,表示尚未调用该方法。我知道我应该模拟 DataServices 并将其传递到测试 Controller 中。但似乎在监视该方法时我仍然会遇到同样的问题,无论它是否是模拟的。任何人有任何想法或可以为我提供有关处理此问题的正确方法的资源吗?

最佳答案

编写单元测试时,您应该隔离每段代码。在这种情况下,您需要隔离您的服务并单独对其进行测试。创建服务的模拟并将其传递给您的 Controller 。

var mockDataServices = {
getServicesNodeList: function () {
return <insert your sample data here > ;
}
};

beforeEach(inject(function ($controller, $rootScope, $document) {
scope = $rootScope.$new(),
doc = $document,
rootScope = $rootScope;

var controller = $controller('TreeViewController', {
$scope: scope,
$rootScope: rootScope,
$document: doc,
DataServices: mockDataServices
});
}));

如果发出 $http 请求的是您的服务,您可以从单元 Controller 测试中删除该部分。编写另一个单元测试来测试该服务在初始化时是否进行了正确的 http 调用。

关于javascript - Jasmine angularjs - 监视 Controller 初始化时调用的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15840097/

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