【发布时间】:2017-09-26 09:02:23
【问题描述】:
所以在我的工厂里,我有一个循环,它请求 HTTP 调用并将它们添加到一个 Promise 数组中。
然后我对结果执行$q.all 以构建模型。
当我来测试它时,我无法让 HTTP 进行所有调用,它只进行最后一个调用,我需要它来进行所有调用并构建模型。
下面是非常精简的代码,(我使用 7 个日期,但想保持简短)
工厂代码
function getLatestData(){
var dateArray= ['2017-09-21','2017-09-22']
for (i = 0; i < 2; i++) {
var url = 'data-server/date/[i]'
promises.push(getData(url)); // getData is a simple $http function call.
}
return $q.all(promises).then(function(response){
buildModel(reponse);
});
}
所以当我来测试这个时,我得到了类似的东西(我确实尝试了一个循环,但失败了)。
httpBackend.expectGET('data-server/date/2017-09-21' ).respond(mockData[0]);
httpBackend.expectGET('data-server/date/2017-09-22' ).respond(mockData[1]);
rootScope.$apply();
modelFactory.getLatestData().then(function(response){
expect(response).toEqual(mockModelData);
})
所以我 console.log 获取 URL 并且我看到所有 URL 请求都是相同的,它们似乎没有更新导致此错误
Error: Unexpected request: GET 'data-server/date/2017-09-22'
Expected GET 'data-server/date/2017-09-21'
因为它总是最后一个 httpBackend.expectGET 被占用。
我错过了什么?
【问题讨论】:
标签: angularjs unit-testing jasmine mocking httpbackend