我有下面的代码,我想尽可能地测试它。我只是摸不着头脑如何在authenticationService.authenticate()
的那个区块内测试那两行。我来回搜索,但我找不到任何有用的信息。
当我检查广播是否被触发时,结果是假的,因为最初有一条广播消息会触发整个代码。
function shellController($location, $rootScope, $scope, authenticationService, authService, common)
{
$scope.$on('event:auth-loginRequired', function ()
{
var user = {
userName: 'visitor',
password: 'visitor'
};
authenticationService.authenticate(user).then(function (result) {
$rootScope.$broadcast('event:username-changed');
authService.loginConfirmed();
});
});
}
当authenticationService.authenticate()
成功返回时,我如何模拟它 - 它不是测试的对象是否成功返回 - 以及是否调用了$rootScope.$broadcast('event:username-changed');
- 这是测试对象?< / p>
答案 0 :(得分:1)
测试承诺的要点是知道可以通过执行[[:space:]]
来解决或拒绝承诺。另一点是模拟返回promise的特定函数返回的promise(通过返回已解析的promise或被拒绝的promise)。通过这样做,为您提供控制测试流程的工具。下面的测试向您展示了如何执行此操作:
<强> DEMO 强>
<强> script.spec.js 强>
$rootScope.$digest()
答案 1 :(得分:0)
您想测试承诺行为还是仅测试成功回调中的逻辑?
如果它只是回调,那么我会从一个匿名函数转移到它自己的函数,并在没有承诺的情况下测试它。
否则我认为您可以在测试中使用$ httpBackend来触发承诺。