electron - 电子单元测试多窗口
问题描述
我必须使用 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);
});
}
解决方案
推荐阅读
- matlab - 在 matlab 中使用 fminunc 保存多个优化图
- python - 将值添加到 Python 中字典中的特定键
- javascript - 当另一个打开时折叠内容html css javascript
- wordpress - Woocommerce - 一次将多个产品添加到购物车
- ios - 远程通知 iOS 中的通知标识符
- asp.net-core - ASP.NET Core 3.1单击浏览器后退按钮时如何强制重新加载视图
- django-models - 如何通过 uuid4 在 django 中获得正确的 UUID 格式而不是连字符?
- azure-data-explorer - kusto 中不同的无序动态列
- ionic4 - Showing SyntaxError: Unexpected token U in JSON at position 0 在尝试构建时电容器项目中的问题
- linux - shm_open 是共享库中的未定义符号