【发布时间】:2014-04-04 23:34:12
【问题描述】:
我的 $resource-wrapping 服务有一个非常简单的单元测试。我已经模拟并设置了 httpBackend 以返回包含七个项目的数组。当我运行测试时,它报告返回了 4 个项目,而不是 7 个:
函数 (a1, a2, a3, a4) { ... }
预计 4 为 7。
以下是我的服务和我的规格
=== 服务===
/* original
angular.module('TeamSportApp')
.factory('LedgerService', function ($resource) {
var Ledgers = $resource("/rest/api", { id: '@id'},
{
allLedgers : { method: 'GET', isArray: true},
postTransaction : { method: 'POST'},
removeTransaction : { method: 'DELETE'}
});
return Ledgers;
})*/
/* Fixed */
.factory('LedgerService', function ($resource) {
var Ledgers = $resource("/rest/api/:id", { id: '@id' },
{
allLedgers : { method: 'GET', isArray: true},
postTransaction : { method: 'POST'},
removeTransaction : { method: 'DELETE'}
});
return Ledgers;
})
})
=== 规范 ===
var ledgerArray = [
{id:1, name:"Master Ledger"},
{id:2, name:"User1 Ledger"},
{id:3, name:"User2 Ledger"},
{id:4, name:"User3 Ledger"},
{id:5, name:"User4 Ledger"},
{id:6, name:"User5 Ledger"},
{id:7, name:"User6 Ledger"}
];
ddescribe('Ledger service test', function(){
var ledgers, httpBackend;
beforeEach(module('TeamSportApp','ngResource'));
beforeEach(inject(function ($injector) {
ledgers = $injector.get("LedgerService");
httpBackend = $injector.get("$httpBackend");
}));
afterEach (function () {
httpBackend.verifyNoOutstandingExpectation ();
httpBackend.verifyNoOutstandingRequest ();
});
/* ORIGINAL ERROR
it('gets a list of ledgers', function() {
httpBackend.when('/rest/api').respond(ledgerArray);
var result = ledgers.allLedgers;
console.log(result);
expect(result.length).toBe(4);
//httpBackend.flush();
});*/
/* All fixed using angular1.2.14 per [this][1] */
it('gets a list of ledgers', function() {
httpBackend.expectGET('/rest/api').respond(ledgerArray);
var result = ledgers.allLedgers();
httpBackend.flush();
expect(result.length).toBe(7);
});
it('gets a single ledger', function() {
httpBackend.expectGET('/rest/api/2').respond(singleLedger);
var result = ledgers.get({id:2});
httpBackend.flush();
console.log(result);
expect(result.name).toBe(singleLedger.name);
});
});
【问题讨论】:
-
在预期结果之前使用
httpBackend.expectGET().respond()而不是.when()... 和.flush() -
为什么
httpBackend.flush();被评论和expect(result.length).toBe(4);。我猜是7当你收到错误时。 -
我试过你的推荐;与以前相同的错误加上这个:{错误:不满意的请求:在/Users/phaggood/Desktop/Dropbox/Project/Current/Incubator/mobileapps/dreamfactory/teamsport/test/js/angular-mocks.js中获取/rest/api(第 1488 行)} 取消注释 flush() 得到“错误:没有挂起的刷新请求!”
标签: angularjs jasmine httpbackend