我写了一个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注入幻像页面,但这对我来说似乎有些不好。
我完全错了吗?
答案 0 :(得分:0)
好的,经过一些研究并与其他开发人员交谈后,似乎创建不同的HTML文件将是最干净的解决方案。但是,由于我不想在每次更改webapp时手动更新所有这些文件,因此我决定使用injectJS解决方案as described in this great post。
现在我可以动态地将mocha testfiles注入实时站点并运行它们。