我将运行mocha测试套件来测试节点红色节点。 因此我使用mocha和selenium驱动程序。
我遇到运行node-red模块的问题。
如果我用$ mocha --ui **tdd**
开始测试,则node-red应用程序无法找到我的流程。因为他在文件夹'〜/ .node-red / tdd '中搜索。我不知道为什么将mocha [option] 设置为路径?
仅使用命令$ mocha
,函数suite();
未定义?
我会用自己的设置将问题解决为init node-red。 喜欢这种方式.. http://nodered.org/docs/embedding.html
通过这种方式,我可以在'RED.start()'之后运行node-red,但是我没有URL,也无法在selenium驱动程序中打开node-red?
require('colors');
var async = require ('async');
var fs = require('fs');
var node = require ('../../mynode.js');
var assert = require('node-assertthat');
var http = require('http');
var http = require('http');
var express = require("express");
var RED = require("node-red");
// Create an Express app
var app = express();
// Add a simple route for static content served from 'public'
app.use("/",express.static("public"));
// Create a server
var server = http.createServer(app);
var settings = {
settingsFile:"/usr/local/lib/node_modules/node-red/settings.js",
userDir:"/home/<user>/.nodered",
flowFile: "flow_<name>.json",
functionGlobalContext: { } // enables global context
};
// Initialise the runtime with a server and settings
RED.init(server,settings);
var webdriver = require('../'),
By = webdriver.By,
until = webdriver.until;
/* connect to selenium browser */
driver = new webdriver.Builder()
.forBrowser('chrome')
.build();
suite('node', function(){
var driver;
suite('test setup', function(){
suite('connect to http://127.0.0.1:1880', function(){
setup(function(){
});
test('run Node-Red ',function(done){
setTimeout(function(){
/* run node-red */
RED.start();
done();
},2000);
});
test('open URL \'http://localhost:1880/#\'', function(done) {
setTimeout(function(){
driver.get('http://localhost:1880/#');
/* open node-red URL */
driver.getTitle().then(function(title) {
console.log('\nPage title is:\ '+ title.red.bold +"\n");
assert.that(title, is.equalTo('Node-RED'));
done();
});
},2000);
});
});
答案 0 :(得分:1)
您已设置默认路线
app.use("/",express.static("public"));
除非您将Node-RED路由设置为不同的路径,否则这将与Node-RED发生冲突。
您需要在设置中设置httpNodeRoot和httpAdminRoot,例如
var settings = {
settingsFile:"/usr/local/lib/node_modules/node-red/settings.js",
userDir:"/home/<user>/.nodered",
flowFile: "flow_<name>.json",
httpAdminRoot:"/red",
httpNodeRoot: "/api",
functionGlobalContext: { } // enables global context
};
如果您这样做,那么您将在localhost上访问Node-RED,如下所示:
编辑: 如果使用httpIn节点
,则只需设置httpNodeRoot答案 1 :(得分:0)
解决
问题是'var driver' 在第一个'suite()'中,我初始化了一个新的'var drive;'并覆盖第一个。这是一个愚蠢的错误。
...
suite('node', function(){
-- var driver;
++ //var drive;
...