我的控制器中有一个范围功能,带有一些异步功能。一切都完成后,它会改变状态。
controller.js
$scope.test = function () {
async().then(function () {
$state.go('somewhere');
});
};
我可以用setTimeout()
来测试它,但我觉得这很脏。
如何在测试中等待stateChange?
修改
我想为test()
函数编写单元测试,但因为没有承诺我需要注意测试中的状态变化。但是怎么样?它适用于setTimeout()
,但我不想使用setTimeout()
,因为它感觉不对。是否有类似$scope.$watch
的状态?
test.js
...
it('test()', function (done) {
$scope.test();
setTimeout(function () { // I want this replaced with a listener for state
expect($scope.someVar).to.be.equal('value');
expect($state.current.name).to.be.equal('somewhere');
});
});
...
答案 0 :(得分:1)
当我编辑问题来描述我的问题时,我找到了解决方案。 可以收听广播事件,因此可以使用
...
it('test()', function (done) {
$scope.test();
$rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams) {
expect($scope.someVar).to.be.equal('value');
expect(toState.name).to.be.equal('somewhere');
});
});
...
答案 1 :(得分:0)