Модульное тестирование службы, использующей $resource

#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());