Jest 能够 mock 一个 class 的构造函数么?或者有没有其它方法?

2020-06-12 10:00:53 +08:00
 yazoox

javascript/typescript

Jest 写 unit test

被测试的类,大概长这个样子

import {MyEnumerator} from "../MyEnumerator";

export class FolderEnumerate {

  getEnumerator() {
    return new MyEnumerator();
 }

}

大家不要纠结 /诟病这个设计,这是 legacy code,我需要添加 unit test.

FolderEnumerate & getEnumerator 的 code coverage 不够。这里测试代码还没有跑到,需要添加测试。 但我不是很懂,这儿怎么 mock 掉 MyEnumeraor.

谢谢!

1821 次点击
所在节点    JavaScript
4 条回复
divasatanica
2020-06-12 17:12:48 +08:00
依赖注入? 你现在 FolderEnumerate 在内部依赖 MyEnumerate 这个类,写个方法将 MyEnumerate 注入到 FolderEnumerate 当中再进行 new 操作而不是写死 new 一个 MyEnumerate 类的实例,这样测试时可以注入你的 Mock 类来实现单元测试
JimmyLv
2021-04-12 23:20:37 +08:00
使用 Jest mock `constructor()` 方法即可

```js
import LoginApi from "../../services/api/login-api"

jest.mock("../../services/api/login-api")

LoginApi.mockImplementation(() => ({
login: jest.fn(() => ({
displayName: "张总",
})),
}))
```
JimmyLv
2021-04-12 23:24:10 +08:00
使用 Jest mock `constructor()` 方法即可

import { MyEnumerator } from "../MyEnumerator";

jest.mock("../MyEnumerator")

MyEnumerator.mockImplementation(() => ({
enumerate: jest.fn(() => ({
whateverYouWant: "xxxx",
})),
}))
yazoox
2021-04-14 10:51:34 +08:00
@JimmyLv
这里的 mockImplementation 里的,“ enumerate” 是啥意思?这样就是 mock 掉构造函数?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/680891

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX