Насмешливые методы процесса в Jest

У меня есть 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;

Чтобы протестировать метод fixPathForAsarUnpack, мне нужно имитировать versions и mainModule из process. Я пытался сделать это так:

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"
  );
});

Но выдает ошибку:

  ● 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)

Что я делаю неправильно, как мне издеваться над process объектом?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
350
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы должны издеваться над процессом следующим образом:

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

Отличный ответ. Просто проверьте global.process в строке 2 отсутствует буква 's'

henk.io 02.03.2022 16:07

Другие вопросы по теме