我正在尝试围绕现有服务包装单元测试,并且无法解释测试结果中显示的数据并导致我的测试失败。首先,球员们:
服务方式:
function createAddressType(newAddressType) {
var defObj = $q.defer();
addressTypesResource = $resource(addressTypesAPI, {}, {query: { method: 'GET'}, create: { method: 'POST'}, update: { method: 'PUT'}, remove: { method: 'DELETE'}});
var newType = addressTypesResource.create({'addresstypes': [
{'addresstype': newAddressType}
]});
newType.$promise.then(function(data){
defObj.resolve(data);
});
return defObj.promise;
}
单元测试:
it('should try to create the passed address type on the server', function(){
var newType = addressTypeService.blankModel('123', '456');
newType.type_name._value_ = 'Fred';
httpBackend.expect('POST','/v1/rest/addresstype', {addresstypes:[{addresstype:newType}]})
.respond({addresstypes:[{addresstype:{
'type_name': {'_value_': 'Fred'},
'origin_application': {'_value_': '123'},
'subsidiary_sid': {'_value_': '456'},
'sid':{'_value_':'1234567890'}
}}]});
var returnValue = {};
var createType = addressTypeService.create(newType);
createType.then(function(data){
returnValue = data;
});
httpBackend.flush();
expect(returnValue).toEqual({addresstypes:[{addresstype:{
'type_name': {'_value_': 'Fred'},
'origin_application': {'_value_': '123'},
'subsidiary_sid': {'_value_': '456'},
'sid':{'_value_':'1234567890'}
}}]});
});
测试结果:
Expected { addresstypes : [ { addresstype : { type_name : { _value_ : 'Fred' }, origin_application : { _value_ : '123' }, subsidiary_sid : { _value_ : '456' }, sid : { _value_ : '1234567890' } } } ], $promise : { then : Function, catch : Function, finally : Function }, $resolved : true }
to equal { addresstypes : [ { addresstype : { type_name : { _value_ : 'Fred' }, origin_application : { _value_ : '123' }, subsidiary_sid : { _value_ : '456' }, sid : { _value_ : '1234567890' } } } ] }.
有人可以告诉我为什么$promise...
部分还在挂着吗?我最初有这个服务不使用$q
而只是返回$resource
调用,但后来我们开始在内部解析之前将它们传回去(我们最终必须在主要承诺之前和之后添加代码)当它在生产中运行良好,但单元测试给了我白发。
答案 0 :(得分:2)
预计会在响应中包含承诺。所以你需要检查returnvalue.addresstypes。
expect(returnValue.addresstypes.toString()).toEqual({addresstypes:[{addresstype:{
'type_name': {'_value_': 'Fred'},
'origin_application': {'_value_': '123'},
'subsidiary_sid': {'_value_': '456'},
'sid':{'_value_':'1234567890'}
}}]}.toString());