gpt4 book ai didi

angularjs - 使用 $state.transitionTo 的单元测试 Controller

转载 作者:行者123 更新时间:2023-12-03 21:30:37 26 4
gpt4 key购买 nike

在 Controller 中,我有一个使用 $state.transitionTo 的函数“重定向”到另一个状态。

现在我一直在测试这个功能,我总是收到错误 Error: No such state 'state-two' .我该如何测试?我很清楚 Controller 对其他状态一无所知,但是我如何模拟这种状态?

一些代码:

angular.module( 'mymodule.state-one', [
'ui.state'
])

.config(function config($stateProvider) {
$stateProvider.state('state-one', {
url: '/state-one',
views: {
'main': {
controller: 'MyCtrl',
templateUrl: 'mytemplate.tpl.html'
}
}
});
})

.controller('MyCtrl',
function ($scope, $state) {
$scope.testVar = false;
$scope.myFunc = function () {
$scope.testVar = true;
$state.transitionTo('state-two');
};

}
);
describe('- mymodule.state-one', function () {

var MyCtrl, scope

beforeEach(module('mymodule.state-one'));

beforeEach(inject(function ($rootScope, $controller) {

scope = $rootScope.$new();

MyCtrl = $controller('MyCtrl', {
$scope: scope
});

}));

describe('- myFunc function', function () {
it('- should be a function', function () {
expect(typeof scope.myFunc).toBe('function');
});

it('- should test scope.testVar to true', function () {
scope.myFunc();
expect(scope.testVar).toBe(true);
expect(scope.testVar).not.toBe(false);
});
});
});

最佳答案

免责声明:我自己没有这样做过,所以我完全不知道它是否会起作用,以及你所追求的。
从我的头顶,我想到了两个解决方案。
1.) 在您的测试中预先配置 $stateProvider返回 state-two 的模拟状态这也是 ui-router 项目本身为测试状态转换所做的。
见:https://github.com/angular-ui/ui-router/blob/04d02d087b31091868c7fd64a33e3dfc1422d485/test/stateSpec.js#L29-L42
2.) 如果试图到达 state-two,则捕获并解析异常并将其解释为已完成的测试。
第二种方法看起来很hackish,所以我会投票给第一种。
然而,很有可能我完全误会了你,应该好好休息一下。
解决方案代码:

beforeEach(module(function ($stateProvider) { 
$stateProvider.state('state-two', { url: '/' });
}));

关于angularjs - 使用 $state.transitionTo 的单元测试 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17567894/

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