Электронный блок тестирования нескольких окон - PullRequest
0 голосов
/ 24 октября 2018

Мне нужно создать настольное приложение с 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);
    });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...