在控制器内,我有一个使用$state.transitionTo来“重定向”到另一个状态的功能.
现在我被困在测试这个功能,我总是错误错误:没有这样的状态’状态二’.我该怎么测试呢?对于我来说,控制器并不了解其他国家的任何信息,但是我如何模拟这个状态呢?
一些代码:
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); }); }); });@H_502_9@ @H_502_10@@H_502_9@
免责声明:我自己没有这样做,所以我完全不知道它是否会奏效,是你以后的事情.
从我的头顶,我的脑海里有两个解决方案.
1.)在你的测试中,配置$stateProvider为状态2返回一个嘲笑状态这也是ui-router项目本身测试状态转换的方式.
2.)捕获并解析异常,并将其解释为满足测试,如果尝试进入状态二
第二种方法似乎非常黑客,所以我会投票选举第一.
然而,有可能我完全错了,应该休息一下.
beforeEach(module(function ($stateProvider) { $stateProvider.state('state-two',{ url: '/' }); }));@H_502_9@