mirror of
https://github.com/node-red/node-red.git
synced 2025-03-01 10:36:34 +00:00
Add UI test cases for messages on cookbook (#1562)
This commit is contained in:
committed by
Nick O'Leary
parent
fd4fdb31b5
commit
8d7c157751
@@ -14,67 +14,125 @@
|
||||
* limitations under the License.
|
||||
**/
|
||||
|
||||
var RED = require("../../red/red.js");
|
||||
|
||||
var when = require("when");
|
||||
var http = require('http');
|
||||
var express = require("express");
|
||||
var fs = require('fs-extra');
|
||||
var path = require('path');
|
||||
var app = express();
|
||||
|
||||
var RED = require("../../red/red.js");
|
||||
|
||||
var utilPage = require("./pageobjects/util/util_page");
|
||||
|
||||
var server;
|
||||
var homeDir = './test/resources/home';
|
||||
var address = '127.0.0.1';
|
||||
var listenPort = 0; // use ephemeral port
|
||||
var url;
|
||||
/*
|
||||
* Set false when you need a flow to reproduce the failed test case.
|
||||
* The flow file is under "homeDir" defined above.
|
||||
*/
|
||||
var isDeleteFlow = true;
|
||||
|
||||
function cleanup() {
|
||||
var flowsFile = homeDir + '/flows_'+require('os').hostname()+'.json';
|
||||
function getFlowFilename() {
|
||||
var orig = Error.prepareStackTrace;
|
||||
var err = new Error();
|
||||
Error.prepareStackTrace = function (err, stack) {
|
||||
return stack;
|
||||
};
|
||||
// Two level higher caller is the actual caller (e.g. a caller of startServer).
|
||||
var filepath = err.stack[2].getFileName();
|
||||
var filename = path.basename(filepath, ".js");
|
||||
Error.prepareStackTrace = orig;
|
||||
|
||||
var flowFile = 'flows_' + filename + '.json';
|
||||
return flowFile;
|
||||
}
|
||||
|
||||
function cleanup(flowFile) {
|
||||
deleteFile(homeDir+"/"+flowFile);
|
||||
deleteFile(homeDir+"/."+flowFile+".backup");
|
||||
}
|
||||
|
||||
function deleteFile(flowFile) {
|
||||
try {
|
||||
fs.statSync(flowsFile);
|
||||
fs.unlinkSync(flowsFile);
|
||||
} catch (err) {
|
||||
}
|
||||
fs.statSync(flowFile);
|
||||
if (isDeleteFlow) {
|
||||
fs.unlinkSync(flowFile);
|
||||
}
|
||||
} catch (e) {}
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
startServer: function(done) {
|
||||
cleanup();
|
||||
app.use("/",express.static("public"));
|
||||
server = http.createServer(app);
|
||||
var settings = {
|
||||
httpAdminRoot: "/",
|
||||
httpNodeRoot: "/api",
|
||||
userDir: homeDir,
|
||||
functionGlobalContext: { }, // enables global context
|
||||
SKIP_BUILD_CHECK: true,
|
||||
logging: {console: {level:'off'}}
|
||||
};
|
||||
RED.init(server, settings);
|
||||
app.use(settings.httpAdminRoot,RED.httpAdmin);
|
||||
app.use(settings.httpNodeRoot,RED.httpNode);
|
||||
server.listen(listenPort, address);
|
||||
server.on('listening', function() {
|
||||
var port = server.address().port;
|
||||
url = 'http://' + address + ':' + port;
|
||||
});
|
||||
RED.start().then(function() {
|
||||
done();
|
||||
});
|
||||
startServer: function() {
|
||||
try{
|
||||
utilPage.init();
|
||||
|
||||
// Name a flow file including caller filename so that multiple Node-RED servers can run simultaneously.
|
||||
// Call this method here because retrieving the caller filename by call stack.
|
||||
var flowFilename = getFlowFilename();
|
||||
browser.windowHandleMaximize();
|
||||
browser.call(function () {
|
||||
// return when.promise(function(resolve, reject) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
cleanup(flowFilename);
|
||||
app.use("/",express.static("public"));
|
||||
server = http.createServer(app);
|
||||
var settings = {
|
||||
httpAdminRoot: "/",
|
||||
httpNodeRoot: "/api",
|
||||
userDir: homeDir,
|
||||
flowFile: flowFilename,
|
||||
functionGlobalContext: { }, // enables global context
|
||||
SKIP_BUILD_CHECK: true,
|
||||
logging: {console: {level:'off'}}
|
||||
};
|
||||
RED.init(server, settings);
|
||||
app.use(settings.httpAdminRoot,RED.httpAdmin);
|
||||
app.use(settings.httpNodeRoot,RED.httpNode);
|
||||
server.listen(listenPort, address);
|
||||
server.on('listening', function() {
|
||||
var port = server.address().port;
|
||||
url = 'http://' + address + ':' + port;
|
||||
});
|
||||
RED.start().then(function() {
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
browser.url(url);
|
||||
browser.waitForExist('#palette_node_inject');
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
stopServer: function(done) {
|
||||
if (server) {
|
||||
try {
|
||||
RED.stop().then(function() {
|
||||
server.close(done);
|
||||
cleanup();
|
||||
done();
|
||||
try {
|
||||
// Call this method here because retrieving the caller filename by call stack.
|
||||
var flowFilename = getFlowFilename();
|
||||
browser.call(function () {
|
||||
browser.close(); // need to call this inside browser.call().
|
||||
return when.promise(function(resolve, reject) {
|
||||
if (server) {
|
||||
RED.stop().then(function() {
|
||||
server.close(function() {
|
||||
cleanup(flowFilename);
|
||||
resolve();
|
||||
});
|
||||
});
|
||||
} else {
|
||||
cleanup(flowFilename);
|
||||
resolve();
|
||||
}
|
||||
});
|
||||
} catch(e) {
|
||||
cleanup();
|
||||
done();
|
||||
}
|
||||
});
|
||||
} catch (err) {
|
||||
console.log(err);
|
||||
throw err;
|
||||
}
|
||||
},
|
||||
|
||||
|
Reference in New Issue
Block a user