Мне нужно создать настольное приложение с Electron и AngularJS.Это приложение должно быть связано с устройством.Я могу общаться с устройством с помощью 32-битной DLL, предоставленной производителем.
На данный момент у меня есть проблема с модульным тестированием.У меня есть два окна, которые общаются с ipcRenderer.Одно из окон скрыто и выполняет цикл «пока устройство подключено».Но , которые замораживают скрытое окно и функцию «перед каждым» моего модульного тестирования, уходят в таймаут.
Как выполнить модульное тестирование в этой конфигурации?Или кому лучше сделать цикл «пока устройство подключено»?
* ПРИМЕЧАНИЕ: цикл блокирует интерфейс COM
Настройка: - 32-разрядная версия Electron v3.0.4 - electronic-edge-js v8.3.8 - spectron v5.0.0 - mocha v5.2.0 - angularJs v1.7.5
C # DLL "Пока устройство подключено"
// while we found epID
while (mon_epd.EpdID > 0)
{
securiteWhile += 1;
// check every 2 second
Thread.Sleep(2000);
mon_retour.code_retour = "004";
ok = OpenDevice(PortSerie, mon_epd.dosi_id);
if (ok != 1) { EPD_Deconnect(); mon_retour.Add_message("danger", "Impossible d'ouvrir le dosimètre sur le port : " + PortSerie.ToString()); mon_retour.chaine_retour = mon_epd; return mon_retour; };
mon_retour.code_retour = "200";
ok = ReadEpdID(ref mon_epd.EpdID, ref mon_epd.HardVersion, ref mon_epd.SoftVersion, ref mon_epd.FunctionFlag);
if (ok != 1) { EPD_Deconnect(); mon_retour.Add_message("warning", "Dosimètre deconnecté"); mon_retour.chaine_retour = mon_epd; return mon_retour; };
Commit();
EPD_Deconnect();
}
return mon_retour;
main.js- создание окна
function createWindow () {
// window property
mainWindow = new BrowserWindow({width: 1920, height: 1080, frame: false,
webPreferences: {
nodeIntegration: true,
preload: __dirname+'/preload.js' }})
// load html file
mainWindow.loadFile('index.html')
// when main window is close
mainWindow.on('closed', function () {
// On ferme les autres threads
secondThread.close();
mainWindow = null
})
createWindow2();
}
Javascript скрытое окно
// call c# DLL send response if device is disconnected
var DLL_WhileDosiConnected = edge.func({
assemblyFile:'Calculate.dll',
typeName:'Dosimetre.Startup',
methodName:'WhileDosiConnected',
sync:false
});
function WhileDosiConnected(){
DLL_WhileDosiConnected(null, function (error, result) {
if (error) throw error;
// when we have a response, send it to main window
let mainWindow = remote.getGlobal ('mainWindow');
if (mainWindow) mainWindow.webContents.send ('dosimetrePerdu', result);
});
}