技术解析

Jest 能够 mock 一个 class 的构造函数么?或者有没有其它方法?
0
2021-08-13 13:08:41
idczone

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.

谢谢!


依赖注入? 你现在 FolderEnumerate 在内部依赖 MyEnumerate 这个类,写个方法将 MyEnumerate 注入到 FolderEnumerate 当中再进行 new 操作而不是写死 new 一个 MyEnumerate 类的实例,这样测试时可以注入你的 Mock 类来实现单元测试

使用 Jest mock `constructor()` 方法即可
```js
import LoginApi from "../../services/api/login-api"
jest.mock("../../services/api/login-api")
LoginApi.mockImplementation(() => ({
login: jest.fn(() => ({
displayName: "张总",
})),
}))
```

使用 Jest mock `constructor()` 方法即可
import { MyEnumerator } from "../MyEnumerator";
jest.mock("../MyEnumerator")
MyEnumerator.mockImplementation(() => ({
enumerate: jest.fn(() => ({
whateverYouWant: "xxxx",
})),
}))


这里的 mockImplementation 里的,“ enumerate” 是啥意思?这样就是 mock 掉构造函数?

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服