gpt4 book ai didi

AngularJS UI 路由器 : Test ui-sref

转载 作者:行者123 更新时间:2023-12-02 23:14:05 24 4
gpt4 key购买 nike

我正在尝试测试一些使用 <a ui-sref='someState'>link</a> 的 View 链接到我的应用程序中的其他州。在我的测试中,我触发了对此元素的点击,如下所示:

element.find('a').click()

如果状态切换到someState,我该如何测试?使用 $state 时会很容易在我的 Controller 中,如下所示:

// in my view
<a ng-click="goTo('someState')">link</a>

// in my controller
$scope.goTo = function(s) {
$state.go(s)
};

// in my tests
spyOn($state, 'go');
element.find('a').click()
expect($state.go).toHaveBeenCalled()

但是当我使用ui-sref时我不知道该监视什么对象。我如何验证我的应用程序处于正确状态?

最佳答案

我自己找到的。查看 Angular ui 路由器源代码后,我在 ui-sref 指令中发现了这一行:

// angular-ui-router.js#2939
element.bind("click", function(e) {
var button = e.which || e.button;
if ( !(button > 1 || e.ctrlKey || e.metaKey || e.shiftKey || element.attr('target')) ) {
// HACK: This is to allow ng-clicks to be processed before the transition is initiated:
$timeout(function() {
$state.go(ref.state, params, options);
});
e.preventDefault();
}
});

当元素收到点击时,$state.go 被包装在 $timout 回调中。因此,在您的测试中,您必须注入(inject) $timeout 模块。然后只需执行 $timeout.flush() 如下所示:

element.find('a').click();
$timeout.flush();
expect($state.is('someState')).toBe(true);

关于AngularJS UI 路由器 : Test ui-sref,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25502568/

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