Headless Browserify JavaScript 使用 Phantom.js 进行测试
Headless Browserify JavaScript Testing with Phantom.js
我正在尝试找到执行以下步骤的方法。
- 为浏览器编写 Node.js 代码
- 使用 browserify 编译代码
- 在终端中测试浏览器代码
我很想获得浏览器收到的 console.logs
,但在终端内。这不仅可以节省我的时间(从创建 HTML 文件、运行 服务器、打开浏览器),还可以进行很酷的事情,例如部署前的自动测试。
我正在尝试制作一个名为 headless-test.js
的 phantomjs
脚本,该脚本将使用 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
但是我没有从 phantom 得到 stdout
。
如果您向 page.content
分配某些内容,它会立即被评估,但之后您会从页面上下文注册到 console.log()
。您只是错过了页面脚本元素中的 console.log()
。
将 page.content
赋值移动到 page.onConsoleMessage
函数之后。
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();
我为此制作了一个节点工具:https://github.com/mantoni/phantomic
如果您还想使用 Mocha 作为测试框架,请尝试 Mochify (https://github.com/mantoni/mochify.js)。它使用 phantomic
和 brout
将控制台输出正确地输入终端。
我正在尝试找到执行以下步骤的方法。
- 为浏览器编写 Node.js 代码
- 使用 browserify 编译代码
- 在终端中测试浏览器代码
我很想获得浏览器收到的 console.logs
,但在终端内。这不仅可以节省我的时间(从创建 HTML 文件、运行 服务器、打开浏览器),还可以进行很酷的事情,例如部署前的自动测试。
我正在尝试制作一个名为 headless-test.js
的 phantomjs
脚本,该脚本将使用 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
但是我没有从 phantom 得到 stdout
。
如果您向 page.content
分配某些内容,它会立即被评估,但之后您会从页面上下文注册到 console.log()
。您只是错过了页面脚本元素中的 console.log()
。
将 page.content
赋值移动到 page.onConsoleMessage
函数之后。
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();
我为此制作了一个节点工具:https://github.com/mantoni/phantomic
如果您还想使用 Mocha 作为测试框架,请尝试 Mochify (https://github.com/mantoni/mochify.js)。它使用 phantomic
和 brout
将控制台输出正确地输入终端。