gpt4 book ai didi

javascript - Jest : How should I mock a class function?

转载 作者:行者123 更新时间:2023-11-29 21:05:15 25 4
gpt4 key购买 nike

晚上好!

我正在努力了解一般的 mock ,这似乎是一个很好的例子。

我有一个,它处理图像加载并使用别名跟踪所述图像(例如,this._imgLoaded[path] = image)

export default class Loader {

// Constructor and what not

_loadImage(path) {
return new Promise((resolve, reject) => {
let image = new Image();
image.src = path;
image.onload = () => resolve(image);
image.onerror = () =>
reject(new Error("Image is not defined. Unable to load it."));
});
}

async loadImage(path, alias) {
const newPath = this._enrichRelativePath(path);
let image;
try {
image = await this._loadImage(newPath);
} catch (error) {
// log and rethrow
console.error(error);
throw error;
}

// cache the loaded image:
this._imgLoaded[newPath] = image;

if (alias) {
this._imgAlias[alias] = newPath;
}
}
}

我认为为了对此进行单元测试,我必须为 _loadImage 创建一个模拟函数并让它返回一些东西。

这样做的最佳方式是什么,同时保持其他功能不变

附带说明一下,我使用的是 ES6。

谢谢!

最佳答案

它似乎适用于原型(prototype)(__mocks__/loader.js):

let Loader = require.requireActual("../src/loader.js");

Loader.prototype._loadImage = function() {
return "test";
};

module.exports = Loader;

然后,在测试文件(__tests__/loader.test.js)中:

import Loader from "loader";
jest.setMock("loader", require("../__mocks__/loader"));

test("Something", () => {
expect.assertions(1);

const loader = new Loader();

expect(loader._loadImage()).toBe("test");
});

关于javascript - Jest : How should I mock a class function?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44425745/

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