Jest:我应该如何模拟一个类函数?

问题描述 投票:2回答:1

晚上好!

我试图总体上嘲笑我,这似乎是一个很好的例子。

我有一个处理图像加载的类,并使用别名(例如,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。

谢谢!

javascript unit-testing mocking jestjs
1个回答
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");
});
© www.soinside.com 2019 - 2024. All rights reserved.