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:
ich auch viele Möglichkeiten, mit callFake versucht haben. Ich habe eine ähnliche Frage auf stackoverflow gefunden, aber es hat mir nicht geholfen.
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