晚上好!
我试图全面了解嘲笑,这似乎是一个很好的例子。
我有一个类来处理图像加载并使用别名(例如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。
谢谢!
答案 0 :(得分:2)
它似乎适用于原型( __ 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");
});