嘲笑具有DI依赖关系的类

隆尼克斯

各种Jest文档显示了“自动”模拟,“手动”模拟或ES6类模拟(在构造函数中实例化依赖项)的创建。

但是我想使用DI / IOC并将依赖项注入到ctor中:

// IBar.ts                                           <--- mock this
export default interface IBar {
  /* ...methods... */
}

// Baz.ts                                            <--- mock this
export default class Baz {
  constructor(spam: Spam, ham: IHam) { /* ... */}
  /* ...other methods... */
}

// Foo.ts                                            <--- test this
export default class Foo {
  constructor(bar: IBar, baz: Baz) { /* ... */}
  /* ...other methods... */
}

所以我想在测试中做到这一点:

const barMock = jest.giveMeAMock("../../IBar");  // or jest.giveMeAMock<IBar>();
const bazMock = jest.giveMeAMock("./Baz");       // or jest.giveMeAMock<Baz>();
const foo = new Foo(bar, baz);

expect(foo.something()).toBe(true);

笑话有可能吗?

(我在上面使用了一些TypeScript语法,但是对于JS / ES6和TS来说是同样的问题。)

布赖恩·亚当斯

当代码转换为JavaScript时,TypeScript接口才被编译掉。

...但是绝对有可能class

您可以使用来自动模拟模块,jest.mockJest在将实现替换为空的模拟函数时将模块的API表面保持不变

baz.js

export default class Baz {
  doSomething() {
    throw new Error('the actual function throws an error');
  }
}

foo.js

export default class Foo {
  constructor(baz) {
    this.baz = baz;
  }
  doSomething() {
    // ...
    this.baz.doSomething();
    // ...
  }
}

code.test.js

jest.mock('./baz');  // <= auto-mock the module

import Baz from './baz';
import Foo from './foo';

test('Foo', () => {
  const baz = new Baz();  // <= baz is an auto-mocked instance of Baz
  const foo = new Foo(baz);

  foo.doSomething();  // (no error)

  expect(baz.doSomething).toHaveBeenCalled();  // Success!
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

实施具有依赖关系的被动属性,这些依赖关系应由DI容器解决

如何正确连接具有依赖关系的类?

创建公共类,具有依赖关系,如何正式共享此依赖关系?

DI-如何重构具有很多依赖关系的构造函数

具有循环依赖关系的两个相互依赖的类的类型提示

如何对具有很多依赖关系的基类派生的类进行单元测试?

Php - 创建一个在构造函数中具有依赖关系的类实例

具有 application.properties 值的依赖关系的 Junit 测试类

在运行时编译Java类,并具有对嵌套jar的依赖关系

如何在Java中实现具有内部依赖关系的惰性求值状态类?

单个python文件中的多个类具有不同的依赖关系

如何解决具有完全相同的路径和名称的2个类的依赖关系?

React 功能组件 useEffect 钩子在类组件生命周期中具有相同的依赖关系

为该类具有依赖关系的接口的每个具体实现组成一个类的实例

具有自动依赖关系的Makefile

运行具有依赖关系的任务的条件

具有依赖关系的异步任务执行

具有循环依赖关系的AngularJS指令

具有依赖关系的Elixir脚本

加载具有依赖关系的Postgres函数

@InjectMocks具有空依赖关系

具有依赖关系的构造函数

具有依赖关系的 Graphviz 分层图

具有JavaScript依赖关系的Rails gem

布局具有循环依赖关系的图像

我如何对运行时类路径具有Maven依赖关系,而对测试类路径却没有?

Singleton 类没有被嘲笑

具有依赖瞬态的 ASP.NET Core DI

具有Play的Scala中的依赖项注入(DI)