如何在Angular中监视NPM包
我在服务中使用了一个npm包。我通过导入模块并在构造函数中设置值来使用它如何在Angular中监视NPM包,angular,karma-jasmine,Angular,Karma Jasmine,我在服务中使用了一个npm包。我通过导入模块并在构造函数中设置值来使用它 import * as fullscreen from 'screenfull'; @Injectable({ providedIn: 'root', }) export class FullscreenService { private renderer: Renderer2; private _fs; constructor() { if (fullscreen.is
import * as fullscreen from 'screenfull';
@Injectable({
providedIn: 'root',
})
export class FullscreenService {
private renderer: Renderer2;
private _fs;
constructor() {
if (fullscreen.isEnabled) {
this._fs = fullscreen;
this._fs.on('change', () => {
if (!this._fs.isFullscreen) {
this.isFullScreen = false;
this.bodyClass(false);
}
});
}
}
open() {
this._fs.request().then(() => {
....
});
}
}
在测试中,我需要监视全屏
属性并返回不同的值。这个特定的包必须被模拟,因为它包含的函数破坏了测试。我已经尝试了我能想到的每一个版本的间谍
test.spec.ts
import * as fullscreen from 'screenfull';
const mockScreenfull = {
isEnabled: true,
isFullscreen: false,
request: () => {
return Promise.resolve(true);
},
toggle: () => {
return Promise.resolve(true);
},
exit: () => {
return Promise.resolve(true);
},
on: () => {
return Promise.resolve(true);
},
};
describe('Service: Fullscreen', () => {
let service: FullscreenService;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [FullscreenService],
});
service = TestBed.get(FullscreenService);
// Methods I've tried that try to return the mock
spyOn(fullscreen, 'exit');
spyOnAllFunctions(fullscreen);
spyOnAllFunctions(fullscreen).and.callThrough();
});
it('should ...', inject([FullscreenService], () => {
expect(service).toBeTruthy();
}));
});
问题是我不知道如何引用npm包
,因为它不是提供者。如果我在服务中调用fullscreen.request(),规范仍然会尝试运行npm包而不是模拟包
有人有解决方案吗?通常,你会做一些类似
var fullscreen=spyOn(…
通常,你会做一些类似var fullscreen=spyOn(…