![](/img/trans.png)
[英]Use window object in angular2 but vscode “Cannot find name 'window' ”
[英]How to use window object in angular 7
我想使用 window 对象的 scrollTo() 函数。 直接通过访问window.scrollTo(0,0),我可以实现这个功能。 当我在 angular 中搜索有关使用 window 的信息时,人们正在创建一个如下所示的提供程序:
import {InjectionToken, FactoryProvider} from '@angular/core';
export const WINDOW = new InjectionToken<Window>('window');
const windowProvider: FactoryProvider = {
provide: WINDOW,
useFactory: () => window,
};
export const WINDOW_PROVIDERS = [windowProvider];
内部服务使用如下代码:
import {Injectable, Inject} from '@angular/core';
import {WINDOW} from './window.provider';
@Injectable({
providedIn: 'root',
})
export class WindowService {
constructor(@Inject(WINDOW) public window: Window) {}
}
模块内
{provide: WINDOW_PROVIDERS, useValue: window},
一切都适用于上述代码,但在运行测试用例时,我收到以下错误。 几乎一半的应用程序测试用例因以下错误而失败
NullInjectorError: No provider for InjectionToken window!
window.service 的默认测试用例
import { TestBed } from '@angular/core/testing';
import { WindowService } from './window.service';
describe('WindowService', () => {
beforeEach(() => TestBed.configureTestingModule({}));
it('should be created', () => {
const service: WindowService = TestBed.get(WindowService);
expect(service).toBeTruthy();
});
});
如何解决这个问题??
您需要设置以下configureTestingModule
:
TestBed.configureTestingModule({
providers: [WINDOW_PROVIDERS, WindowService]
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.