【问题标题】:Run mocha from phantomjs从 phantomjs 运行 mocha
【发布时间】:2013-12-09 22:15:43
【问题描述】:

我想使用 Mocha 和 PhantomJS 来做一些 BDD
定义一些功能路径并测试它们。

简而言之,我很想运行命令phantomjs test.jstest.js 包含如下内容:

var mocha = require("mocha"); // This one fails with "ReferenceError: Can't find variable: process"..... "/node_modules/mocha/index.js:2"

var page = require('webpage').create();

describe('Empty', function(){ // Obviously this one fails too with "ReferenceError: Can't find variable: describe"
  describe('tests are', function(){
    it('very nice', function(done){
      page.open("http://www.phantomjs.org/", function (status) {
          console.log('Loading a web page');
          console.log("Page is loaded");
          phantom.exit(); // Or, just call `done()`, doesn't matter right now
      });
    })
  })
})

你能认出两者的代码片段吗?

我怎样才能做到这一点?我在某个页面上读到了可以require()“mocha.js”的浏览器版本,但它似乎不太好用。

------------------更多细节 --------------- ---------

我尝试过 CasperJS,但除了提供一些非常好的东西外,我还怀念 Mocha 吸引人的测试设计(服务器端)。

我看到的所有示例都说明了如何在网页(浏览器端)(带有脚本标签)上运行 Mocha 测试,而不是 NodeJS 测试脚本。
我不喜欢它,我想保持测试纯控制台,此外这种方法鼓励我将测试代码添加到我的网页中。

我看到一些项目试图简化这种方法,但我并不满足于此 - 似乎他们通过引入 Mocha 和 PhantomJS 已经完成了 95% 的要求,但最后 5% 仍未完成,真正将它们联系在一起的东西。

【问题讨论】:

  • 找到了这个很棒的项目(github.com/alexscheelmeyer/node-phantom),但不清楚那里的事情是如何完成的。我喜欢远程控制 PhantomJS 的想法。我不确定我应该使用它,因为它似乎成为一个有限(未来)支持的小项目..
  • 需要注意的是,PhantomJS 是一个无头的 webkit 浏览器(V8 运行时),而 Mocha 被设计为在 Node 运行时上运行。要求 Mocha 失败,因为 process 是 Node 为脚本提供的东西(在浏览器中不可用)。

标签: javascript node.js testing phantomjs mocha.js


【解决方案1】:

您可能仍希望在 Node 上下文 (node test.js) 中运行您的测试,但使用 node-phantom 库之类的东西从节点控制 phantomJS。

TJ Holowaychuk 在他的所有库中所做的事情是 process.env.COV check(我个人不明白),但 PhantomJS 很可能不支持流程变量。

您可以通过将window.processwindow.process.env 设置为空对象来欺骗Mocha,不过我猜您稍后会遇到更多PhantomJS/Node 问题。

【讨论】:

  • process.env.COV 只是他使用环境变量在代码和检测代码之间切换代码覆盖(可能使用他自己的jscoverage工具)。
  • 那个“幻影”库似乎是我正在寻找的,一旦我开始编译它就会测试它:~ (Windows).. 会回来回答/s!谢谢
  • 好的,现在似乎有两个选项可以工作:phantomnode-phantom.. 这些是确切的 NPM 名称,供其他人参考。谢谢迈克尔! :)
【解决方案2】:

从节点通过桥运行 phantomjs 可能不是最佳选择。

phantomjs-nodeify 模块(我从http://github.com/jgonera 派生)使 phantomjs 环境更像节点环境——它将模块进程、事件等添加到 phantomjs。

webspecter 框架实现了这一点,不过使用的是旧的 phantomjs 和旧的 mocha。

似乎可以让 mocha 测试在 phantom 2.0 中运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多