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