你有兩個問題需要處理。
通過測試文件
tests/**/*.js
是其中有一個node.js module一個水珠通配符語法。問題是PhantomJS具有與node.js不同的運行時,並且fs模塊具有完全不同的功能。正因爲如此,你不能只需要節點glob。您必須將it連接到PhantomJS。在PhantomJS中包含feature-request這個權利。
如果您有很多測試文件,並且您想將它們分別傳遞給主PhantomJS腳本,則可能會遇到命令行調用長度的問題。根據shell/OS的不同,緩衝區可能只包含命令和測試文件的有限數量的字符。
將單獨文件中的所有測試文件作爲列表進行管理是最容易的,只需將該文件傳遞到主PhantomJS腳本即可。您也可以在主腳本中擁有文件列表。
運行在一系列
多個腳本無論如何,你做什麼,你需要測試之間清除Cookie和localStorage的。我不確定是否可以清除緩存。
1.調整
您可能需要調整測試腳本。當您撥打phantom.exit()
時,整個過程終止。它不能被覆蓋exit
這樣
phantom.exit = function(){};
,因爲它是一個原生屬性來防止。您需要更改腳本就像一個模塊:
module.exports = function(done){
// your script ...
setTimeout(function(){
// some more of your script
// add clean up and queue next script...
page.close(); // clean up memory consumption; might still be not enough
done(); // call instead of "phantom.exit();"
}, 1000);
};
主要腳本應該是這樣的:
var testfiles = ["..."];
var async = require("async"); // install async through npm
testfiles = testfiles.map(function(file){
return require(file);
});
async.series(testfiles, function(err){
console.log("ERROR", err);
phantom.exit();
});
如果你只使用一個page
實例貫穿你可以嘗試創建它主文件並將其分別傳遞給每個測試文件。這可能會解決你的內存消耗,如果這是一個問題。
2。沒有變化
也有可能你不需要改變你的測試文件。您可以使用fs.read
將測試文件讀入字符串。您可以使用字符串操作/正則表達式來更改phantom.exit();
的done();
並添加一行以關閉頁面。
當你完成,你可以只是eval
字符串(異步)。使用eval
可能不是安全問題,因爲您可能已編寫測試腳本。
謝謝,經過幾個小時的調查,我得出了同樣的結論。 @ArtjomB。你會把它放在一個答案的形式,所以我可以upvote和接受它? – 2014-09-25 11:39:41