iframeを使ってウェブサイトをテストできるNode.jsを使ってキュウリテストをセットアップしようとしています。 通常、iframeはクロススクリプトのセキュリティ上の制限のために動作しません。 しかし、可能だった場合(私はそれが確信しています。そして、私はあなたに解決策を提示することを信頼します) 特定のURL名が要求されているときに、要求されたURLを介してテストの対象となるWebサイトを取得します。 iframeにテストターゲットのコピーがロードされます。 基本的には、req.url に基づいて特定のページをフェッチする標準のnode.jsサーバーです。アドレス要求ルーターに似ています。Node.js経由でHTTPリクエストをルーティングする
これは私がまったくそれをするためのぼんやりした試みです。 経由でテストページを取得しています。 URLは機能します。 しかし、httpサーバから接続オブジェクトへの切り替えに問題があります。 httpサーバの応答で接続を「フィード」する方法はありますか?
PS。私は2つのnode.jsサーバーを持つソリューションも作成しました。 ノード1は、テストターゲットをフェッチし、キュウリテストページと混合します。 キュウリ試験を実施しているノード2。 このソリューションは機能しています。しかし、それはJavaScriptの名前の競合が発生するWebサイト上で問題を作成します。だから、カプセル化によってこの問題を解決するiframeソリューションは、より魅力的です。
var http = require('http');
var connect = require('connect');
var port = process.env.PORT || 8788;
var server = http.createServer(function(req, webres)
{
var url = req.url;
console.log(url);
if(url == '/myWebsiteToBeTestedWithCucumberJS')
{
// Load the web site to be tested "myWebsiteToBeTestedWithCucumberJS"
// And update the references
// Finaly write the page with the webres
// The page will appear to be hosted locally
console.log('Loading myWebsiteToBeTestedWithCucumberJS');
webres.writeHead(200, {'content-type': 'text/html, level=1'});
var options =
{
host: 'www.myWebsiteToBeTestedWithCucumberJS.com,
port: 80,
path: '/'
};
var page = '';
var req = http.get(options, function(res)
{
console.log("Got response: " + res.statusCode);
res.on('data', function(chunk)
{
page = page + chunk;
});
res.on('end', function()
{
// Change relative paths to absolute (actual web location where images, javascript and stylesheets is placed)
page = page.replace(/ href="\/\//g , ' href="/');
page = page.replace(/ src="\//g , ' src="www.myWebsiteToBeTestedWithCucumberJS.com');
page = page.replace(/ data-src="\//g , ' data-src="www.myWebsiteToBeTestedWithCucumberJS.com');
page = page.replace(/ href="\//g , ' href="www.myWebsiteToBeTestedWithCucumberJS.com');
webres.write(page);
webres.end('');
});
});
}
else
{
// Load any file from localhost:8788
// This is where the cucumber.js project files are hosted
var dirserver = connect.createServer();
var browserify = require('browserify');
var cukeBundle = browserify({
mount: '/cucumber.js',
require: ['cucumber-html', './lib/cucumber', 'gherkin/lib/gherkin/lexer/en'],
ignore: ['./cucumber/cli', 'connect']
});
dirserver.use(connect.static(__dirname));
dirserver.use(cukeBundle);
dirserver.listen(port);
}
}).on('error', function(e)
{
console.log("Got error: " + e.message);
});
server.listen(port);
console.log('Accepting connections on port ' + port + '...');
Cukestall(https://github.com/jbpros/cukestall)をご覧になることをお勧めします。 Cucumber.jsの潜在的な正式な "iframeランナー"です。 * local * Node.jsアプリケーションのテストを目的としています。ただし、* remote *アプリでフィーチャスイートを実行して読み込むのはかなり簡単です。 – jbpros
は 'loadMyWebsiteToBeTestedWithCucumberJS'関数名のアップコートを持っています –