2017-12-31 60 views
0

Ich versuche Einheit Testfall mit Jasmine Spion zu schreiben. Unten ist mein Service-Code.Jasmine Spy: Einen Fehler im Gegenzug erhaltenWert

function reset(someParam) { 
var deferred = $q.defer(); 

svcTypes.getTasksWithRoles().then(function (types) { 
    if (types.HadError) return; 

    // do some stuff..    

    deferred.resolve(results); 
}, function (errorResponse) { 
    deferred.reject(errorResponse); 
}); 
return deferred.promise; } 

Unten ist mein Einheit Testfall:

describe('tests for svcWorkordertypes', function() { 

beforeEach(angular.mock.module('workorders.service')); 
beforeEach(angular.mock.module('workordertypes.service')); 


var svcWorkordertypes; 
var svcTypes; 
var $q, $httpBackend; 
beforeEach(angular.mock.inject(function (_svcWorkordertypes_, _svcTypes_, _$q_, _$httpBackend_) { 
    svcWorkordertypes = _svcWorkordertypes_; 
    svcTypes = _svcTypes_; 
    $q = _$q_; 
    $httpBackend = _$httpBackend_; 

})); 

//This is working fine. 
it('all controls should be set', function() {    
    expect(svcWorkordertypes).toBeDefined(); 
    expect(svcTypes).toBeDefined(); 
    expect($q).toBeDefined(); 
    expect($httpBackend).toBeDefined(); 

}); 

it('test reset method', function() { 
    //Arrange 
    var someParam = 'test'; 
    var types = [{ RoleList: 'newRoleList', isHeader: true, Roles: 'testRole' }]; 
    $httpBackend.when("GET", 'null/tasks/types?$select=IncludeRoles').respond(200, JSON.stringify(types)); 
    spyOn(svcTypes, 'getTasksWithRoles').and.returnValue(function() { 
     var deferred = $q.defer(); 
     deferred.resolve(JSON.stringify(types)); 
     return deferred.promise; 
    }); 

    //Act 
    var result = svcWorkordertypes.reset(selectedRoleName); 


    //Assert 
    result.then(function (res) { 
     console.log(res + ' res output...'); 
     //expect(JSON.stringify(res)).toEqual(JSON.stringify(types)); 
    }); 
    //expect(svcTypes).toBeDefined(); 
}) }); 

Unten ist der Fehler:

enter image description here

ich auch viele Möglichkeiten, mit callFake versucht haben. Ich habe eine ähnliche Frage auf stackoverflow gefunden, aber es hat mir nicht geholfen.

Antwort

1

getTasksWithRoles sollte eine Zusage zurückgeben, und es wird verspottet, eine Funktion zurückzugeben, die eine Zusage zurückgibt.

es sein sollte:

spyOn(svcTypes, 'getTasksWithRoles').and.returnValue(
    $q.resolve(JSON.stringify(types)) 
); 
+0

Vielen Dank für die Antwort Estus. Jetzt bekomme ich diesen Fehler nicht. Es gibt jedoch immer noch null Objekt in Versprechen. Der Debugger geht nicht in den Code "// tue irgendwas" ein. Erste Debugger gehen Sie zu "svcTypes.getTasksWithRoles()" und danach direkt an das Ende der Anweisung, d. H. Rückkehr deferred.Promise ;. – KiddoDeveloper

Verwandte Themen