Я не могу понять, как выполнить модульное тестирование некоторых методов класса поддержки в Angular с помощью Jasmine. Тестируемый класс представляет собой одноэлементный, простой класс машинописного текста, который инициализируется одной из служб при запуске, а затем используется различными компонентами в течение жизненного цикла приложений путем вызова AccountsManager.getInstance()
.
. конструктор и инициализатор для этого класса, называемый AccountsManager:
export class AccountsManager {
private static instance: AccountsManager;
static initialize(accountService: AccountService) {
if (!this.instance) { this.instance = new AccountsManager(accountService) }
}
static getInstance(): AccountsManager {
if (!this.instance || !this.instance.isInitialized) {
throw new Error("AccountsManager.getInstance(): AccountManager has not been initialized");
}
return this.instance;
}
//methods...
}
Я пробовал установить его для теста Жасмин на основе того, что я мог найти в различной справочной документации, но документы, которые я видел, показывают, как тестировать Angular компонент не произвольный класс.
Проблема заключается в получении экземпляра AccountService для инициализации AccountsManager. Реализовать реальный AccountService сложно, поэтому я хотел использовать фиктивный сервис, поскольку модульные тесты, которые я хочу запустить, в любом случае не полагаются на AccountService.
Я нашел пример того, как протестировать компонент с помощью фиктивной службы, но я предполагаю, что они являются неправильной установкой для тестирования POT C.
В любом случае, вот что я попробовал, просто чтобы посмотреть.
fdescribe('AccountsManager', () => {
let fixture: ComponentFixture<AccountsManager>
let mockAccountService = { }
let component : AccountsManager;
beforeEach(() =>{
TestBed.configureTestingModule({
declarations: [AccountsManager],
providers: [{provide: AccountService, useValue: mockAccountService}]
})
fixture= TestBed.createComponent(AccountsManager);
component = fixture.componentInstance;
})
});
Я предполагаю, что это никогда не сработает, так как "AccountsManager" - это просто класс, а не компонент Angular, но в любом случае он теперь не работает TestBed.createComponent(AccountsManager)
с сообщением об ошибке, что конструктор AccountsManager является закрытым (по замыслу), и createComponent ожидает, что будет конструктор publi c. Но я предполагаю, что в любом случае есть более простой способ сделать то, что я хочу.
Если все, что я хочу сделать, это иметь возможность инициализировать этот класс с помощью фиктивного экземпляра AccountsService, какой самый простой способ сделать это, чтобы я мог выполнять свои тесты?