我正在尝试使用chutzpah / test explorer在视觉工作室中进行茉莉花测试。
我有一个看起来像这样的控制器:
#include<stdio.h>
int main()
{
char c = 125;
c = c+10;
printf("%d", c);
return 0;
}
我的测试文件如下所示:
function ctrl($scope, $timeout, resolvedData) {
var vm = this;
vm.data;
init();
function init() {
if(resolvedData.length > 0) {
$timeout(function() {
vm.data = resolvedData;
}, 0);
};
};
}
当我添加$ timeout.flush()时,我收到此错误:
错误:[$ rootScope:infdig] 10 $ digest()迭代达成。中止!
取出$ timeout.flush()会给我这个错误:
预期未定义为[{},{},{}]。
在expect之前添加$ scope。$ apply()(而不是$ timeout.flush())给我这个:
错误:[$ rootScope:infdig] 10 $ digest()迭代达成。中止!
我还缺少其他东西吗?我想测试在调用$ timeout函数后控制器加载时vm.data被设置但没有运气。
编辑1: 我创造了一个plunker,它的工作正常。我很难过。 http://plnkr.co/edit/Ae28AyjKwCTen1nHKZAo?p=preview
编辑2: 我用$ timeout.verifyNoPendingTasks()替换$ timeout.flush(),如下所示:
describe('ctrl', function() {
var ctrl,
resolvedData,
$controller,
$timeout,
$scope;
var mockResolvedData = [{}, {}, {}];
beforeEach(function() {
module('app');
inject(function(_$controller_, _$rootScope_, _$timeout_) {
$scope = _$rootScope.$new();
$controller = _$controller_;
$timeout = _$timeout_;
resolvedData = mockResolvedData;
ctrl = $controller('ctrl', {$scope: $scope, resolvedData: resolvedData, $timeout: $timeout})
})
})
it('should set data when the controller loads', function() {
$timeout.flush();
expect(ctrl.data).toEqual(mockResolvedData);
})
})
现在我有这个错误:
错误:要延迟的任务要刷新(2):{id:0,时间:0},{id:1,时间:0}
因此我们可以清楚地看到有任务要刷新,但是当我刷新它们时,我得到了摘要错误。
答案 0 :(得分:0)
当使用回调函数调用$ timeout时,发生了这种情况。省略此功能时,确实有效。对于你的控制器,这意味着:
$timeout(vm.data = resolvedData, 0);
我知道这是一个不太受欢迎的解决方案,但它适用于控制器和测试。