Angularjs Httpx27的茉莉花试验;t返回预期结果
对于$resource包装服务,我有一个非常简单的单元测试。我已经对httpBackend进行了模拟,并设置为返回一个包含七项的数组。当我运行测试时,它报告已返回4项,而不是7项: 函数(a1,a2,a3,a4){…} 预计4比7 下面是我的服务和我的规格 ==服务===Angularjs Httpx27的茉莉花试验;t返回预期结果,angularjs,jasmine,httpbackend,Angularjs,Jasmine,Httpbackend,对于$resource包装服务,我有一个非常简单的单元测试。我已经对httpBackend进行了模拟,并设置为返回一个包含七项的数组。当我运行测试时,它报告已返回4项,而不是7项: 函数(a1,a2,a3,a4){…} 预计4比7 下面是我的服务和我的规格 ==服务=== /* original angular.module('TeamSportApp') .factory('LedgerService', function ($resource) { var Ledgers = $
/* 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);
});
})) 试试这个:
服务:
.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;
});
it('gets a list of ledgers', function() {
httpBackend.expect('/rest/api/').respond(ledgerArray);
var result = ledgers.allLedgers();
httpBackend.flush();
expect(result.length).toBe(7);
});
测试:
.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;
});
it('gets a list of ledgers', function() {
httpBackend.expect('/rest/api/').respond(ledgerArray);
var result = ledgers.allLedgers();
httpBackend.flush();
expect(result.length).toBe(7);
});
使用
httpBackend.expectGET().respond()
而不是.when()
。。。和.flush()
在预期结果之前,为什么是httpBackend.flush()代码>注释和预期(结果.长度).toBe(4)代码>。我猜你出错的时候是7
;与前面相同的错误加上以下内容:{错误:未满足的请求:GET/rest/api in/Users/phaggood/Desktop/Dropbox/Project/Current/Incubator/mobileapps/dreamfactory/teamsport/test/js/angular-mocks.js(第1488行)}取消对flush()的注释会得到“错误:没有挂起的刷新请求!”错误:意外请求:GET/rest/api预期/rest/api/undefinedIt似乎只有在我从工厂中删除{id:'id'}时才起作用,但现在我失去了使用账本进行查询和获取单个实例的能力-Ledgers.allLedgers()和Ledgers.GET(someId)所有测试现在都在工作,请参阅上面的修复-我必须稍微修改Liu的答案。