2015-02-28 3 views
0

Я пытаюсь найти способ выполнить следующие шаги.Headless Browserify JavaScript Testing с Phantom.js

  • Написать Node.js код для браузера
  • Скомпилировать с browserify
  • Test кода браузера в терминал

Я хотел бы получить console.logs, что браузер получает, но внутри терминала. Это не только сэкономит мне время (создание HTML-файла, запуск сервера, открытие браузера), это также позволит использовать такие классные вещи, как автоматическое тестирование перед развертыванием.

Я пытаюсь сделать что-то под названием headless-test.jsphantomjs скрипт, который будет получить передается аргумент, используя system.args[1] и fs.read может получить содержимое любой Javascript вы передаете ему.

var content = fs.read(system.args[1]) 
page.content = '<html><body><script type="text/javascript">'+content+'</script></body></html>' 

Это позволит мне сделать что-то вроде этого:

phantomjs ./headless-test.js ./bundle.js 

Я получаю эту ошибку SyntaxError: Multiline comment was not closed properly поэтому убедитесь, что вы уродовать свой bundle.js.

Все это было бы замечательно и работать, если бы я мог получить эту демо ниже работы. Минимальный жизнеспособный продукт:

var system = require("system") 
var webPage = require('webpage') 
var page = require('webpage').create() 
page.content = '<html><body><script type="text/javascript">console.log("hello world")</script></body></html>'; 

page.onConsoleMessage = function(msg, lineNum, sourceId) { 
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")'); 
}; 

page.evaluate(function(){ 

}) 

phantom.exit(); 

Ожидаемые результаты здесь:

$ phantomjs ./headless-test.js 
hello world 

Однако я не получаю не stdout от фантома.

ответ

1

Если вы назначили что-то page.content, он сразу же оценивается, но после этого вы регистрируетесь в контексте console.log() из контекста страницы. Вы просто пропустите console.log() из элемента сценария на странице.

Назначение page.content после функции page.onConsoleMessage.

0
var system = require("system") 
var webPage = require('webpage') 
var page = require('webpage').create() 

page.onConsoleMessage = function(msg, lineNum, sourceId) { 
    console.log('CONSOLE: ' + msg + ' (from line #' + lineNum + ' in "' + sourceId + '")'); 
} 

var fs = require("fs") 
var content = fs.read(system.args[1]) 
page.content = '<html><body><script type="text/javascript">'+content+'</script></body></html>' 

phantom.exit(); 
0

Я сделал инструмент узла для этого: https://github.com/mantoni/phantomic

Если вы должны также использовать Mocha в качестве тестовой структуры, попробуйте Mochify (https://github.com/mantoni/mochify.js). Он использует phantomic с brout, чтобы получить вывод консоли в терминал правильно.