我的项目正在使用:Node,Coffeescript,SocketIO,Browserify和Mocha。 (用于标准服务器端单元测试的mocha)
我想使用无头浏览器自动化一些客户端接口测试。 PhantomJS看起来是理想的选择(由于网络套接字支持而选择了Zombie)。
PhantomJS页面警告它不是测试运行器,我理解,他们建议使用mocha-phantomjs项目来推动测试。
所以我已经能够运行样本测试(例如mocha-phantomjs tests/mixed.html
),但我当前的问题实际上是在测试中使用PHANTOM。 mocha-phantomjs repo中的所有样本测试似乎都使用标准的mocha服务器端单元测试。
e.g。我可以轻松运行mocha-phantomjs tests/mixed.html
来查看无聊的旧单元测试。或者我可以运行phantomjs tests/login.coffee
来加载我的登录屏幕......但是我如何将两者结合起来对我应该在登录屏幕上看到的内容进行断言?
我在网上找不到任何这方面的例子,我正在努力理解最好的方法。
希望这一切都有意义。提前感谢您的任何帮助。
更新:我找到了作者的以下建议(here),但我真的不明白该如何处理它:phantomjs lib/mocha-phantomjs.coffee test/mixed.html
答案 0 :(得分:14)
有一个相当不错的Mocha和Phantom.JS here测试教程。
关于Mocha和PhantomJS的部分很简短,但基本的想法是将DOM断言和交互放入您的Mocha测试套件中,通过testrunner.html文件在客户端运行它,然后将mocha-phantomjs指向testrunner.html文件。
换句话说,您的Mocha测试可能如下所示:
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。此Stack Overflow question提供了一个基本示例。
权衡的是,虽然Zombie.JS可以简单地通过要求节点模块来使用,并且非常快,但它不是“真正的”Web浏览器。 PhantomJS更接近,因为它基于webkit。此外,使用mocha-phantomjs的第一种方法将允许您在您选择的不同浏览器中运行客户端Mocha测试,PhantomJS只是其中之一。