我必须使用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);
});
}