我的控制器具有如下代码:
$q.all([qService.getData($scope.id), dService.getData(), qTService.get()])
.then(function (allData) {
$scope.data1 = allData[0];
$scope.data2 = allData[1];
$scope.data3 = allData[2];
});
在我的单元测试中,我正在做这样的事情:
beforeEach(inject(function($rootScope, $q, $location){// and other dependencies...
qServiceSpy = spyOn(_qService, 'getData').andCallFake(function () {
var data1 = {
id: 1,
sellingProperty: 1,
};
var d = $q.defer();
d.resolve(data1);
return d.promise;
});
dServiceSpy = spyOn(_dService, 'getData').andCallFake(function () {
var data2 = [{ "id": "1", "anotherProp": 123 }];
var d = $q.defer();
d.resolve(data2);
return d.promise;
});
qTServiceSpy = spyOn(_qTService, 'get').andCallFake(function () {
var data3 = [{ id: 0, name: 'Rahul' }];
var d = $q.defer();
d.resolve(data3);
return d.promise;
});
rootScope = $rootScope;
});
现在在测试中,我正在检查是否调用了服务,并且data1,data2是否未定义。
it('check if qService' got called, function() {
expect(scope.data1).toBeUndefined();
rootScope.$digest();
expect(_quoteService.getQuote).toHaveBeenCalled();
});
it('check if "data1" is defined', function () {
expect(scope.data1).toBeUndefined();
rootScope.$digest();
expect(scope.data1).toBeDefined();
});
我的问题是,这是工作的罚款,直到我取代与q.all控制器和测试我个人的服务电话scope.$apply
与rootScope.$digest
。使用q.all和rootScope.$digest
(也尝试使用scope.$apply
),两个测试均失败,并显示以下错误:
达到10个$ digest()迭代。流产!
如果我删除了,rootScope.$digest
那么承诺永远不会得到解决,而测试失败了
预期未定义。
任何帮助我应该如何对代码进行单元测试q.all
?
碰到这篇文章
但这也无济于事,因为我已经在尝试使用$digest
。
你可以尝试把$rootScope.$apply()
在afterEach()
回调函数。承诺$apply()
在Angular中解决。
afterEach(function(){
rootScope.$apply();
});
问题内容: 我正在尝试编写业力/茉莉花测试,我想对模拟如何在正在返回诺言的服务上工作进行一些解释。我解释一下我的情况: 我有一个控制器,在其中执行以下调用: 这是我的服务方式: 最后,这是我的单元测试: 我真正想做的是将响应对象({“ elements:…})作为fillMapDatas函数的datas参数。我不了解如何模拟所有服务内容(服务,承诺,然后) 问题答案: 因此,如果您的服务是否按预期
我需要用jasmine对一些DOM操作函数进行单元测试(目前我在浏览器和Karma中运行测试) 我想知道最好的方法是什么? 例如,我可以模拟和存根窗口,记录对象和spyOn的几个函数。但这看起来并不是一个简单的解决方案,所以我要问这个问题! 或者有没有更好的方法(也许不用茉莉花)来做到这一点? 非常感谢
我使用文件在 Webstorm 8.0.4 中设置了茉莉花集成 这与语法突出显示的工作方式一样,我可以跳转到声明,文档显示正确。所以连接看起来很好。然而,JSHint仍然为每个关键字抱怨它没有被定义,例如 另请参见以下屏幕截图。正如您所看到的,语法突出显示很好,但我仍然收到一个错误。
我有这个错误的麻烦。我想我忘记了一些东西,无法弄清楚是什么。任务很简单:只需测试我的简单组件。在这里,我们去: 和测试: 和HTML: 这个错误: 需要undefined等于['big','primary theme color']。错误:需要undefined等于['big','primary theme color']。位于UserContext。(http://localhost:9876/
我正试图写一个Jasmine测试来覆盖一个Twitter Boostrap模态对话框。当调试器行被注释掉时,测试失败。当调试器暂停处理并且我继续时,它通过。我认为引导模式的转换导致了这个问题,因为在我进行expect调用时,模式对话框还不在DOM中。 如何在测试期间禁用转换? 谢谢 感谢Jarred,您的解决方案非常有效!这是我的工作测试:
问题内容: 我正在使用茉莉花对angularjs控制器进行单元测试,该控制器在范围内将变量设置为调用返回promise对象的服务方法的结果: 服务内部: 在我的angularjs应用程序上下文中,这可以正常工作,但在茉莉花单元测试中则无法工作。我已经确认“ then”回调在单元测试中正在执行,但是$ scope.myVar承诺永远不会设置为回调的返回值。 我的单元测试: 另外,如果我将控制器更改为