我想窥探一个承诺,并在我的单元测试中伪造承诺,但问题是如果我首先运行构造函数,他首先运行承诺并运行Spyon。spyOn构造函数与茉莉花的方法
但是,当我第一次运行spyOn,然后构造它会给出一个错误,存储是未定义的。
有人知道如何解决这个问题吗?
规格文件:
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'); });
});
“容易”第一种方法可能是您注入存储而不是在构造函数中创建一个实例。然后,您可以在调用构造函数 – iberbeu
之前模拟此注入的存储空间您是否有示例? – mbakker1996
你将'SettingsService'实现为一个角度服务,然后将它注入到你的类中:类型'static $ inject = ['settingsService'];构造函数(private settingsService:SettingsService){...}'然后你可以用'$ injector.get('settingsService')'在你的测试中得到这个服务的一个副本,并模拟它或者窥探它 – iberbeu