gpt4 book ai didi

javascript - 使用 jasmine 测试路由时 Angular 为空 $state 名称

转载 作者:行者123 更新时间:2023-11-29 14:47:45 25 4
gpt4 key购买 nike

像许多人一样,我是使用 Jasmine 测试 Angular 的新手,并且正在努力做到这一点。我使用 ui-router 进行路由,现在,我遇到的问题是测试中的 $state.current.name 是一个空字符串,我不知道为什么会这样那个。

这是我的路由模块中的代码:

var cacRouteViewMod = angular.module('cacRouteViewMod', ['ui.router', 'cacLib']);

cacRouteViewMod.config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {

$stateProvider
.state('countries', {
url: '/countries',
templateUrl: 'countries/countries.html',
controller: 'countriesCtrl',
resolve : {
countries: ["getCountry", function(getCountry) {
return getCountry();
}]
}
});

}]);

我写的测试是这样的:

describe('cac_app_views (routing)', function() {

var $rootScope,
$state,
$injector,
getCountryMock,
state = 'countries';

beforeEach(function() {

module('cacRouteViewMod', function($provide, $urlRouterProvider) {
$urlRouterProvider.deferIntercept();
$provide.value('getCountry', getCountryMock = {});
});

inject(function(_$rootScope_, _$state_, _$injector_, $templateCache) {
$rootScope = _$rootScope_;
$state = _$state_;
$injector = _$injector_;
$templateCache.put('countries/countries.html', '');
})
});

// Test 1
it('should respond to URL', function() {
expect($state.href(state)).toEqual('#/countries');
});

// Test 2
it('should resolve getCountry', function() {
getCountryMock = jasmine.createSpy('getCountry').and.returnValue('nanana');

$rootScope.$apply(function() {
$state.go('countries');
});

expect($state.current.name).toBe('countries');
expect($injector.invoke($state.current.resolve.countries)).toBe('nanana');
});
});

测试 1 没问题,但测试 2 有问题。测试失败,因为它期望“”为“国家/地区”。

当我将 $state.current 记录到控制台时,它给出

Object {name: "", url: "^", views: null, abstract: true}

此时我已经很绝望了。谁能帮我理解/解决这个问题?

最佳答案

我是这样解决的:

通过阅读类似的 stockoverflow 帖子,我为 $stateChangeError 设置了一个监听器它被触发了。我注销了 error数据,看到它是 typeError: getCountry is not a function .这导致了 $state未更新,因此仍包含原始(空)$state .

我修复了 $provide.value对这样的:

$provide.value('getCountry', getCountryMock = function() {return 'nanana';});

表示“每当调用 getCountry 时,提供 getCountryMock,这是一个返回字符串 'nanana' 的函数。

现在所有测试都按照我希望的方式进行。

注意:我发现 getCountryMock = jasmine.createSpy.....我对 $provide.value() 的其他更改已过时的代码行所以我把它注释掉了。

关于javascript - 使用 jasmine 测试路由时 Angular 为空 $state 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30493849/

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