#angularjs #unit-testing #jasmine #karma-runner
#angularjs #модульное тестирование #jasmine #карма-бегун
Вопрос:
Я пытаюсь обернуть модульный тест вокруг существующей службы и не могу объяснить данные, которые отображаются в результатах теста и приводят к сбою моего теста. Во-первых, игроки:
Метод обслуживания:
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
вызов, но затем мы начали решать проблемы внутри, прежде чем передавать их обратно (в конечном итоге нам придется добавлять код до и после основного обещания), и когда в рабочей среде это работает нормально, но модульный тест вызывает у меня седые волосы.
Ответ №1:
Ожидается, что обещание будет включено в ответ. Поэтому вам нужно проверить наличие 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());