Относительные пути отличаются на модульных тестах - PullRequest
0 голосов
/ 27 апреля 2020

Я борюсь с разными путями для моего электронного приложения. Я хочу объединить функции модульного тестирования из процесса рендеринга с Jest Моя структура проекта выглядит следующим образом:

папка проекта

- src/
    - node_modules/
    - main/
        - index.js (Entry point of app)
        - autoupdater.js
        - startup.js
    - renderer/
        - css/
        - js/
            - utils/
                - config-util.js (Depending file in ../index.js)
            - index.js (File to test)
        - vendor/
        - index.html
    - tests/
        - main/
        - renderer/
            - index.test.js
    package.json
    package-lock.json

пакет. json

{
  "name": "project-name",
  "productName": "Name",
  "appId": "io.domain.project",
  "version": "1.0.6",
  "main": "./main/index.js",
  "homepage": "https://",
  "license": "ISC",
  "author": "XXXX <mail>",
  "copyright": "Copyright © 2020 XXXX",
  "private": true,
  "description": "",
  "scripts": {
    "start": "electron .",
    "test": "ELECTRON_RUN_AS_NODE=true ./node_modules/.bin/electron ./node_modules/jest-cli/bin/jest",
    "clean": "rm -rf dist",
    "build": "electron-builder build --mac --publish never",
    "deploy": "electron-builder build --mac --publish always"
  },
  "build": {
    "mac": {
      "icon": "./build/icon.icns",
      "hardenedRuntime": true,
      "gatekeeperAssess": false,
      "entitlements": "./build/entitlements.mac.plist",
      "entitlementsInherit": "./build/entitlements.mac.plist",
      "target": [
        "dmg",
        "zip"
      ]
    },
    "linux": {
      "target": [
        "AppImage",
        "deb"
      ]
    },
    "afterSign": "./notarize.js",
    "publish": [
      {
        "provider": "generic",
        "url": "https://updates.server.io/files/"
      }
    ]
  },
  "devDependencies": {
    "electron": "^8.0.3",
    "electron-builder": "^22.4.0",
    "electron-notarize": "^0.2.1",
    "jest": "^25.4.0",
    "jest-cli": "^25.4.0"
  },
  "dependencies": {
    "auto-launch": "^5.0.5",
    "crypto": "^1.0.1",
    "dotenv": "^8.2.0",
    "electron-is-dev": "^1.1.0",
    "electron-log": "^4.0.7",
    "electron-traywindow-positioner": "^1.1.0",
    "electron-updater": "^4.2.5",
    "electron-window-state": "^5.0.3",
    "node-json-db": "^1.0.3",
    "os": "^0.1.1"
  }
}

src / renderer / js / index. js

console.log('working directory from index.js: ' + __dirname);
const {ipcRenderer, shell} = require('electron');
const ConfigUtil = require('./js/utils/config-util.js'); //this dependency always breaks
const crypto = require('crypto');

myCustomFunction = () => {
    return 'test';
}

module.exports.myCustomFunction = myCustomFunction;

tests / renderer / index.test. js

console.log('working directory from tests: ' + __dirname);
const { myCustomFunction } = require('../../renderer/js');

describe('test', () => {
    it('should do something', () => {
        expect('test').toBe('test');
    });
});

Точка входа для моего приложения - src/main/index.js, которая запускает основной процесс. Но на данный момент я хочу провести модульное тестирование моего файла (ов) в процессе рендеринга, который находится в src/renderer/js/index.js.

Для целей отладки я поместил console.log(__dirname) в renderer/js/index.js и src/tests/renderer/index.test.js

Всякий раз, когда я запускаю реальное электронное приложение (electron .), все работает нормально, но распечатывается из индекса. js - это "working directory from index.js: ../project-folder/src/renderer"

Это потому, что индекс. js фактически загружается в src/renderer/index.html файл с <script src="./js/index.js" type="modules">

Всякий раз, когда я запускаю тест с шуткой. журнал отладки из индекса. js однако равен "working directory from index.js: ../project-folder/src/renderer/js"

Это потому, что мне нужно как-то включить файл в мои тесты. Как мне избавиться от этой проблемы. К настоящему моменту на самом деле можно запустить тест, изменив относительные пути в моих исходных файлах, или электронное приложение, не меняя ничего. Невозможно запустить оба.

Во время выполнения теста я получаю вывод

 FAIL  tests/renderer/index.test.js
  ● Test suite failed to run

    Cannot find module './js/utils/config-util.js' from 'index.js'

    Require stack:
      renderer/js/index.js
      tests/renderer/index.test.js

      1 | console.log('working directory from index.js: ' + __dirname);
      2 | const {ipcRenderer, shell} = require('electron');
    > 3 | const ConfigUtil = require('./js/utils/config-util.js');

Что я делаю не так? Не может быть так сложно провести модульное тестирование процесса рендеринга, верно ?! Может быть, кто-то уже решил какие-либо связанные проблемы.

...