简体   繁体   English

Jest中的模拟处理方法

[英]Mocking process methods in Jest

I have electron-util.js file I want to cover with tests: electron-util.js测试覆盖的electron-util.js文件electron-util.js

const isElectron = "electron" in process.versions;

const isUsingAsar =
  isElectron &&
  process.mainModule &&
  process.mainModule.filename.includes("app.asar");

export const fixPathForAsarUnpack = path =>
  isUsingAsar ? path.replace("app.asar", "app.asar.unpacked") : path;

In order to test fixPathForAsarUnpack method I need to mock versions and mainModule from process . 为了测试fixPathForAsarUnpack方法,我需要从process模拟versionsmainModule I tried to do it like this: 我试图这样做:

import { fixPathForAsarUnpack } from "../src/electron-util";

test("fixes path for Electron", () => {
  process.versions = {
    electron: "0.0.0",
    mainModule: {
      filename: "/app.asar/index.html"
    }
  };

  const path =
    "/Users/relix/My.app/Contents/Resources/app.asar/node_modules/foo/binary";

  expect(fixPathForAsarUnpack(path)).toBe(
    "/Users/relix/My.app/Contents/Resources/app.asar.unpack/node_modules/foo/binary"
  );
});

But it throws an error: 但这会引发错误:

  ● fixes path for Electron

    TypeError: Cannot assign to read only property 'versions' of object '[object process]'

      4 |
      5 | test("fixes path for Electron", () => {
    > 6 |   process.versions = {
        |   ^
      7 |     electron: "0.0.0",
      8 |     mainModule: {
      9 |       filename:

      at Object.<anonymous>.test (__test__/electron-util.test.js:6:3)

What am I doing wrong, how should I mock process object? 我在做什么错,应该如何模拟process对象?

You should mock the process in this way: 您应该以这种方式模拟该过程:

const originalProcess = process
global.proces = {...originalProcess, version: "your code here"}
// do the test
// ...
// restore the original process object for next tests
global.process = originalProcess

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM