Я борюсь с разными путями для моего электронного приложения. Я хочу объединить функции модульного тестирования из процесса рендеринга с 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');
Что я делаю не так? Не может быть так сложно провести модульное тестирование процесса рендеринга, верно ?! Может быть, кто-то уже решил какие-либо связанные проблемы.