如何在Angular中监视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

我在服务中使用了一个npm包。我通过导入模块并在构造函数中设置值来使用它

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(…