我在AngularJS中测试相当新,我正在尝试为我已经配置的$ stateProvider编写测试:
angular.module("app.routing.config", []).config(function($stateProvider, $urlRouterProvider) {
$stateProvider.state("home", {
url: "/",
templateUrl: "app/modules/home/page/home_page.html",
controller: "HomePageController",
resolve: {
setPageTitle: function($rootScope) {
return $rootScope.pageTitle = "Home";
}
}
}).state("somethingelse", {
url: "/",
templateUrl: "app/modules/home/page/somethingelse.html",
controller: "SomeThingElseController",
resolve: {
setPageTitle: function($rootScope) {
return $rootScope.pageTitle = "Some Thing Else";
}
}
});
return $urlRouterProvider.otherwise('/');
});
我已经编写了一个简单的测试用于检查状态转换为正确的页面,例如:
describe('State Change: home', function() {
beforeEach(function() {
$httpBackend.expectGET('app/modules/home/page/home_page.html').respond({});
$templateCache.put(null, 'app/modules/home/page/home_page.html');
});
it('should go to the home state', function() {
$location.url('home');
$rootScope.$digest();
$httpBackend.flush();
expect($state.href('home')).toEqual('#/');
expect($rootScope.pageTitle).toEqual('Home');
});
});
但我仍然坚持如何在状态配置块中测试解析setPageTitle函数。我想我现在想要的是确保函数被调用(间谍?)。我只是坚持下一步该做什么,有人可以给我任何指示吗?
由于
答案 0 :(得分:1)
因此,在处理解析函数时,您尝试测试的内容有两个:注入代码或执行代码。
执行:您的当前示例已经过正确测试,因为您已经解决了路线问题,并且使用以下方式有效地更新了标题:
expect($rootScope.pageTitle).toEqual('Home');
注入:在您提供一些额外功能或功能的情况下,用例会发生变化,您将要测试控制器如何使用该功能。在这种情况下,您将要使用$ controller函数注入代码来测试$ controller如何利用和使用代码
var mockFunction = function(aValue){.....}
var testedController = $controller('HomePageController', { ..., setPageTitle: mockFunction .....});