首页 > 解决方案 > 电子单元测试多窗口

问题描述

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

现在,我对单元测试有疑问。我有两个与 ipcRenderer 通信的窗口。其中一个窗口被隐藏,仅在“连接设备时”循环。但这冻结了隐藏窗口,并且我的单元测试“在每个”之前的功能进入超时。

如何在该配置中进行单元测试?或者谁以更好的方式“在设备连接时”执行循环?

*注意:循环锁定 COM 接口

设置: - electron v3.0.4 的 32 位版本 - electron-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);
    });
  }

标签: electron

解决方案


推荐阅读