Я хочу подсмотреть обещание и подделку этого обещания в своем модульном тесте, но проблема в том, что если я сначала заведу подряд, проблема в том, что он сначала выполнит обещание, а затем запустит Spyon.метод spyOn в конструкторе с жасмином
Но когда я сначала запускаю spyOn, а затем конструктор, он дает ошибку, что хранилище не определено.
Кто-нибудь знает, как это исправить?
Spec файла:
describe('Settings Service',() => {
beforeEach(() => {
settingsService = new SettingsService(); // This gives a error beceause it runs the promise
spyOn(settingsService.storage, 'get').and.callFake((key: String): Promise<string> => {
return new Promise((resolve, reject) => { resolve('url'); });
});
});
конструктор:
constructor() {
this.storage = new Storage(LocalStorage);
this.storage.get('url').then(data => {
this.setLink(data);
});
}
UPDATE:
Я попытался также это:
let injector: any = ReflectiveInjector.resolveAndCreate([SettingsService]);
settingsService = injector.get(SettingsService);
spyOn(settingsService.storage, 'get').and.callFake((key: String): Promise<string> => {
return new Promise((resolve, reject) => { resolve('https://secure.info/pascal'); });
});
«легкий» первый подход может быть, вы добавляете Storage вместо создания экземпляра в конструкторе. Затем вы можете издеваться над этим вложенным хранилищем перед вызовом конструктора – iberbeu
У вас есть пример? – mbakker1996
вы реализуете 'SettingsService' как угловую службу, а затем вводите ее в свой класс: вид' static $ injection = ['settingsService']; constructor (private settingsService: SettingsService) {...} 'Тогда вы можете получить копию этой службы в своих тестах с помощью' $ injector.get ('settingsService') 'и высмеять ее или заглянуть в нее – iberbeu