gpt4 book ai didi

javascript - 开 Jest 模拟一个 ES6 类以供正在测试的类使用

转载 作者:行者123 更新时间:2023-12-02 23:03:48 26 4
gpt4 key购买 nike

我正在尝试在 jest 中创建一个模拟的 js 类,该类用于将数据获取/放入测试期间不可用的服务器。所以我一直在尝试创建一个模拟类,该类将在调用时传递数据,下面是这些类

数据服务 Controller .js

class DataServiceController {
constructor() {
this._model = DataServiceModel;
}

getUser(id){
return $.get('some-url');
}

}

export default new DataServiceController();

用户 Controller .js

import DataServiceController from '...';

class UserController {
constructor() {
this.userId = '';
}

checkUserPermissions(id) {
DataServiceController.getUser(id).then((resp) => { ... });
}
}
export default new UserController();

用户 Controller .test.js

import UserController from "./user-controller.js";

describe("A utility class for user", () => {
describe("check permissions", () => {
it("should check the users permissions", () => {
...
});
});
});

我正在尝试模拟 DataServiceController 但遇到问题,并且没有找到任何关于如何模拟命名空间的好示例,以便 UserController 将使用模拟的 DataServiceController 并且我可以使用模拟传递值。

最佳答案

查看ES6 Class Mocks关于 Jest 文档。有很多很好的信息和示例,您可能只需使用自动模拟即可完成,而无需定义手动模拟。另请参阅Mocking Modules因为您导出的是单例实例而不是类。

Jest 模拟被提升,因此您可以在测试中模拟依赖项,而不必担心将其放在导入之前。

示例:

import UserController from "./user-controller.js";
import DataServiceController from './path/to/DataServiceController';

jest.mock('./path/to/DataServiceController');

describe("A utility class for user", () => {
describe("check permissions", () => {
it("should check the users permissions", () => {
DataServiceController.getUser.mockResolvedValue({...});
return UserController.checkUserPermissions(123).then(() => {
//Make assertions that your mock resolved value is being used
});
});
});
});

这是一个关于 how mocks work. 的有用存储库它解决了提升问题。

关于javascript - 开 Jest 模拟一个 ES6 类以供正在测试的类使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57682964/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com