如何确保在节点上使用 mocha 和 phantomjs 进行的每个测试都未受影响 HTML
how to ensure untouched HTML for every test with mocha and phantomjs on node
我写了一个 Web 应用程序,我想在其中使用 mocha 和 phantomjs 从命令行进行一些 DOM 测试,我正在尝试找出最好的方法。
由于 Web 应用程序正在执行大量 DOM 操作,我希望能够为每个测试加载全新的 DOM。我尝试使用 webpage module of phantomjs 但我不知道如何 运行 页面上的 mocha 测试(或者这是否是正确的方法)。
当然,我可以创建一个文件 test.html
,在其中通过脚本标记包含 mocha,然后 运行 phantomjs test.html
。但是我怎样才能确保 DOM 在每次测试中都没有受到影响?为每个具有相同内容的测试添加一个 HTML 文件将是一场噩梦。
我目前拥有的:
我的testrunner.js:
var Mocha = require('mocha'),
expect = require('expect.js'),
fs = require('fs'),
path = require('path');
var mocha = new Mocha(
{
ui: 'bdd'
});
// I only add one file for now
mocha.addFile(
path.join(__dirname, 'tests_integration/test.js')
);
mocha.run(function(failures){
process.on('exit', function () {
process.exit(failures);
});
});
我的test.js:
这是我挣扎的地方,因为我不知道如何 运行 页面内的测试:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open("http://test.local", function (status) {
page.evaluate(function (tests) {
// here I need to run my tests, which obviously doesnt work that way
describe('DOM tests',function(){
it('should be able to acces the page',function(){
expect(document.body).not.to.be(undefined)
});
});
return document.body
}.bind(tests), function (html) {
ph.exit();
});
});
});
});
为了 运行 我执行的测试 node integration-runner.js
。我想到的一种解决方案是使用 includeJS 将 mocha 注入幻影页面,但这对我来说似乎有点老套。
我做的完全错了吗?
好的,经过一些研究并与其他开发人员交谈后,似乎创建不同的 HTML 文件将是最干净的解决方案。但是,由于我不想在更改我的 web 应用程序时手动更新所有这些文件,因此我决定使用 injectJS 解决方案 as described in this great post。
现在我可以将 mocha 测试文件动态注入实时站点并 运行 它们。
我写了一个 Web 应用程序,我想在其中使用 mocha 和 phantomjs 从命令行进行一些 DOM 测试,我正在尝试找出最好的方法。
由于 Web 应用程序正在执行大量 DOM 操作,我希望能够为每个测试加载全新的 DOM。我尝试使用 webpage module of phantomjs 但我不知道如何 运行 页面上的 mocha 测试(或者这是否是正确的方法)。
当然,我可以创建一个文件 test.html
,在其中通过脚本标记包含 mocha,然后 运行 phantomjs test.html
。但是我怎样才能确保 DOM 在每次测试中都没有受到影响?为每个具有相同内容的测试添加一个 HTML 文件将是一场噩梦。
我目前拥有的:
我的testrunner.js:
var Mocha = require('mocha'),
expect = require('expect.js'),
fs = require('fs'),
path = require('path');
var mocha = new Mocha(
{
ui: 'bdd'
});
// I only add one file for now
mocha.addFile(
path.join(__dirname, 'tests_integration/test.js')
);
mocha.run(function(failures){
process.on('exit', function () {
process.exit(failures);
});
});
我的test.js: 这是我挣扎的地方,因为我不知道如何 运行 页面内的测试:
var phantom = require('phantom');
phantom.create(function (ph) {
ph.createPage(function (page) {
page.open("http://test.local", function (status) {
page.evaluate(function (tests) {
// here I need to run my tests, which obviously doesnt work that way
describe('DOM tests',function(){
it('should be able to acces the page',function(){
expect(document.body).not.to.be(undefined)
});
});
return document.body
}.bind(tests), function (html) {
ph.exit();
});
});
});
});
为了 运行 我执行的测试 node integration-runner.js
。我想到的一种解决方案是使用 includeJS 将 mocha 注入幻影页面,但这对我来说似乎有点老套。
我做的完全错了吗?
好的,经过一些研究并与其他开发人员交谈后,似乎创建不同的 HTML 文件将是最干净的解决方案。但是,由于我不想在更改我的 web 应用程序时手动更新所有这些文件,因此我决定使用 injectJS 解决方案 as described in this great post。
现在我可以将 mocha 测试文件动态注入实时站点并 运行 它们。