我的项目使用:节点,CoffeeScript的,SocketIO,Browserify和摩卡。 (摩卡为标准服务器侧单元测试)
我想自动使用无头浏览器的一些客户端的接口测试。 PhantomJS看上去像的理想选择(精挑细选僵尸由于网络套接字支持)。
该PhantomJS页面警告它不是一个测试运行,我明白了,他们建议使用摩卡phantomjs项目带动你的测试。
所以,我已经能够获得运行(例如样品测试mocha-phantomjs tests/mixed.html
),但我现在的问题是实际使用测试中PHANTOM。 在摩卡phantomjs回购的所有样品测试似乎使用标准摩卡服务器侧单元测试。
例如我可以很容易地运行mocha-phantomjs tests/mixed.html
以查看无聊的老单元测试。 或者,我可以运行phantomjs tests/login.coffee
加载了我的登录屏幕......但我如何将二者结合起来,使上我应该会看到我的登录屏幕上有什么说法?
我不能在网路上找到任何的例子,而我用理解去了解这一点的最好办法挣扎。
希望这一切才有意义。 感谢您的任何援助。
更新 :我发现作者(以下建议在这里 ),但我真的不明白到底该怎么用它做: phantomjs lib/mocha-phantomjs.coffee test/mixed.html
有一个相当不错的教程与摩卡和Phantom.JS测试在这里 。
在摩卡和PhantomJS的部分很短,但其基本思想是把DOM断言和互动到您的摩卡测试套件,运行它通过testrunner.html文件一拉客户端,然后指向摩卡phantomjs在TestRunner的。 HTML文件。
套用,您的摩卡测试可能是这样的:
describe("DOM Test", function () {
var el = document.createElement("div");
el.id = "myDiv";
el.innerHTML = "Hello World!";
document.body.appendChild(el);
var myEl = document.getElementById('myDiv');
it("has the right text", function () {
(myEl.innerHTML).should.equal("Hello World!");
});
});
而testrunner.html文件将是正常的设置:
<html>
<head>
<title> Tests </title>
<link rel="stylesheet" href="./node_modules/mocha/mocha.css" />
</head>
<body>
<div id="mocha"></div>
<script src="./node_modules/mocha/mocha.js"></script>
<script src="./node_modules/chai/chai.js"></script>
<script>
mocha.ui('bdd');
mocha.reporter('html');
var should = chai.should();
</script>
<script src="test/test.js"></script>
<script>
if (window.mochaPhantomJS) { mochaPhantomJS.run(); }
else { mocha.run(); }
</script>
</body>
</html>
如果您想完全从node.js的生态系统更喜欢一个解决方案来看,这是值得考虑Zombie.JS 。 这个堆栈溢出的问题提供了一个基本的例子。
代价是,虽然Zombie.JS可以通过要求节点模块简单地使用,并且是非常快的,这不是一个“真正”的网络浏览器。 PhantomJS更接近,因为它基于WebKit。 此外,与摩卡phantomjs第一种方法将允许你在你所选择的不同浏览器中运行的客户端摩卡测试,PhantomJS是只是其中之一。