电子单元测试多窗口

时间:2018-10-24 09:31:11

标签: electron

我必须使用Electron和AngularJS构建桌面应用程序。 该应用程序必须与设备连接。 我可以使用制造商提供的32位DLL与设备通信。

就目前而言,我对单元测试有疑问。我有两个与ipcRenderer通讯的窗口。 窗口之一被隐藏,仅在“连接设备”时执行循环。 但是冻结隐藏的窗口和我的单元测试的“每个操作之前”的功能会超时。

如何在该配置中进行单元测试? 还是由谁来更好地“连接设备时”进行循环?

*注意:循环锁定COM接口

设置: -电子版v3.0.4的32位版本 -电子边缘js v8.3.8 -Spectron v5.0.0 -摩卡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);
    });
  }

0 个答案:

没有答案