单元测试控制器,在控制器中有一个$ state.go方法

时间:2014-12-31 09:06:56

标签: javascript angularjs unit-testing jasmine karma-jasmine

如何为具有$ state.go()的函数编写单元测试,并且该函数应该重定向到该特定的状态?

           $scope.inviteMembers = (id)=> {
                $state.go('invite', {deptId: id});
                }

1 个答案:

答案 0 :(得分:16)

由于它是一个单元测试,你只需要确保调用该函数,仅此而已。

这方面的事情:

it('should move to the invite page after inviting someone', function() {
  spyOn($state, 'go');

  $scope.inviteMembers(1);

  expect($state.go).toHaveBeenCalledWith('invite', {deptId: 1});
});

所以这里的主要想法是监视go的{​​{1}}方法,当我们调用该方法时,我们只需要验证已调用$state方法并且什么参数。

在你回答之前......是的,但我想确保状态也发生变化。那么你不需要这样做。

这是一个单元测试,这意味着你唯一关心的是测试这个控制器而不是其他任何东西,它的责任就是调用那个方法。之后发生的事情是其他人的责任,在这种情况下是ui-router,我打赌ui-router经过了很好的测试:)