[英]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.