我正在为Firefox和Chrome编写浏览器扩展。我使用browser.*命令和Mozilla的"webextension-polyfill"模块来在chrome中使浏览器工作。我有一个名为
我想让它可以编写单元测试,但是
我尝试使用
browser.ts
的文件,其中包含一行代码:
export const browser = require('webextension-polyfill');
然后在每个文件中像这样使用它:
import {browser} from '../path/to/browser.ts'
。我想让它可以编写单元测试,但是
require('webextension-polyfill')
这一行让我头疼,因为任何带有browser
的测试都会抛出This script should only be loaded in a browser extension
并引用了先前的require语句。我尝试使用
rewire
、proxyquire
和jest mocks来避免在单元测试中调用require
语句,但我无法成功覆盖它。我唯一能够避免这个错误的方法是使用try-catch并返回异常时的模拟对象,但那看起来很麻烦和混乱。
如何最好地解决这个问题?我看到像 mockzilla
这样的软件包对于模拟很有帮助,但我认为在我可以首先使用 webextension-polyfill
的要求行之后再使用它们。