javascript - 如何在不先导入依赖项的情况下模拟依赖项?
问题描述
让我们看3个文件:
sut.js
:
import dep from './dep';
export function foo() {
/* Do some stuff */
dep();
/* Do some more stuff */
}
dep.js
:
import SomeWebWorker from 'worker-loader!./worker'; // WebPack loader that loads the file as a webworker. The file exists.
export default () => {
/* Do something with `SomeWebWorker` */
};
test.js
:
import sinon from 'sinon';
import {foo} from './sut';
import dep from './dep';
describe('sut', () => {
afterEach(() => { sinon.restore() });
it('Calls ServiceWorker', () => {
const swStub = sinon.stub(dep);
foo();
assert.ok(swStub.called);
});
});
我希望测试能够成功运行并完成,因为foo
调用dep
.
但是,我得到一个错误:
错误:找不到模块 'worker-loader!./worker'
我认为这是因为我调用的方式mocha
是这样的:
cross-env TS_NODE_PROJECT=\"./test.tsconfig.json\" mocha **/*test.{js,ts}
哪里.mocharc.json
是这样的:
{
"require": ["ts-node/register", "global-jsdom/register"],
"exit": true
}
所以在那个上下文中没有 Webpack,因此它阻塞了 Webpack内联加载器语法。
如果是这种情况,那么如果我们根本不加载 'worker-loader!./worker' 而是 stub/mock 它应该可以解决。但是怎么做?
解决方案
推荐阅读
- reactjs - 如果数组中只有项目不存在,如何拖放元素 - React DND ES6
- python - Tkinter 列表框和滚动条不显示
- node.js - 节点中的 CORS 阻止 POSTMAN 获取数据?
- aws-lambda - 如何为 lambda 创建 Kinesis 增强型扇出使用者
- ios - 具有方法返回类型 View 的协议
- c# - .NET 配置 - 如何创建易于理解的配置
- c# - json数据提取并使用ajax调用传递给C#
- python - 如何在张量流 SavedModel 中有多个输出?
- unity3d - 统一覆盖组件检查器标题栏
- android - Android BLE:添加没有 UUID 的服务数据