晚上好!
我试图总体上嘲笑我,这似乎是一个很好的例子。
我有一个处理图像加载的类,并使用别名(例如,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。
谢谢!
它似乎适用于原型(__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");
});