Я пишу модульные тесты Jasmine для родительского сервиса, который наследуется всеми остальными сервисами.
Метод initialize()
не реализован в родительской службе, но реализован всеми дочерними службами.
У меня возникают проблемы с издевательством / заглушением метода initialize()
, и я не могу прибить, если это происходит из-за того, что он не реализован или, возможно, из-за точечной нотации this
или, возможно, мои макеты настроены неправильно.
Ошибка, которую я получаю, - TypeError: this.initialize is not a function
, что имеет для меня большой смысл, поскольку initialize()
определено только в дочерних классах. Но могу ли я заглушить вызов метода, чтобы вернуть то, что я хочу? Ниже моя текущая попытка.
Услуга:
(function() {
"use strict";
angular
.module("shared-services.module")
.factory("ResourceService", ResourceService);
ResourceService.$inject = [
"Session"
];
function ResourceService(
Session
) {
var service = {};
service.makeCopy = makeCopy;
return service;
function makeCopy(resource) {
var copy = resource.id;
copy = this.initialize(resource);
copy.id = id;
if (!!id) {
copy.new = false;
}
return copy;
}
}})();
и тест:
describe('resource service tests', function () {
var mockSession, sut;
beforeEach(function () {
angular.mock.module(function ($provide) {
$provide.service('Session', function () {
this.alert = jasmine.createSpy('alert');
});
});
angular.mock.module('shared-services.module');
});
beforeEach(inject(function (Session, _ResourceService_) {
mockSession = Session;
sut = _ResourceService_;
}));
describe("departments component", () => {
it("should be defined", () => {
expect(sut).toBeDefined();
let resource = {
id: 1,
new: true
}
// trying to stub out the initialize method call to just return the resource
let x = jasmine.createSpy('this', ['initialize']).and.callFake(function (resource) {
return resource;
});
let copy = sut.makeCopy(resource);
expect(copy.id).toBe(1);
})
})
});
Я бы хотел, чтобы мой тест запустился, вызвал мой смоделированный / заглушенный метод и вернул исходный ресурс. Взамен испытательных бомб.