我试图开玩笑地创建一个模拟的js类,该类用于将数据获取/放入测试期间不可用的服务器。因此,我一直在尝试创建一个模拟类,该类将在调用时传递数据,以下是这些类
data-service-controller.js
class DataServiceController {
constructor() {
this._model = DataServiceModel;
}
getUser(id){
return $.get('some-url');
}
}
export default new DataServiceController();
user-controller.js
import DataServiceController from '...';
class UserController {
constructor() {
this.userId = '';
}
checkUserPermissions(id) {
DataServiceController.getUser(id).then((resp) => { ... });
}
}
export default new UserController();
user-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,并且我可以使用模拟传递值
答案 0 :(得分:1)
查看有关开玩笑的文档的ES6 Class Mocks。很多好的信息和示例,您可能只需使用自动模拟就可以完成,而不必定义手动模拟。另外,请注意Mocking Modules,因为您要导出单例实例而不是类。
悬挂了模拟集,因此您可以在测试中模拟依赖项,而不必担心将其放在导入之前。
示例:
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.的有用的存储库,用于解决吊装问题。