如何在PhantomJS或CasperJS中导入其他javascript模块

时间:2013-07-16 10:14:19

标签: javascript coffeescript phantomjs casperjs

我正在尝试使用CasperJS构建功能测试。 caseperjs 由后端测试套件使用以下命令运行:

PHANTOMJS_EXECUTABLE=../client/node_modules/phantomjs/bin/phantomjs  ../client/ext_modules/casperjs/bin/casperjs test ../client/test/functional/init.coffee

init.coffee 中我想导入/包含其旁边的其他模块(文件)。怎么做?

以下不起作用:

require("user")

我想要的是将其他文件中的内容导入init.coffee

3 个答案:

答案 0 :(得分:12)

在尝试了许多其他建议(每个建议都在相应的环境中工作)之后,点击这个解决方案:

phantom.page.injectJs( 'script.js');

答案 1 :(得分:8)

从1.1开始,CasperJS依赖于PhantomJS的原生require()
https://groups.google.com/forum/#!topic/phantomjs/0-DYnNn_6Bs

注入依赖项

在注入其他模块时,CasperJS会查找相对于cur目录的路径 (我们运行 casperjs 命令的地方) 我们可以使用clientScripts选项注入依赖项。但是注入的依赖项不能 全局使用require。它们会立即注入每个加载的页面。

casper.options.clientScripts = ["path/relative/to/cur/dir"]

我们也可以使用命令行args注入模块:

casperjs test --includes=foo.js,bar.js path/to/the/test/file

使用require

要导入用户模块,请使用:

require "./user-module.coffee"

然后在用户模块中,您还可以使用require。使用require路径得到解决 相对于当前文件(调用require) 如果在用户模块中要导入casper libs,则需要 patch require , 检查:https://casperjs.readthedocs.org/en/latest/writing_modules.html

答案 2 :(得分:2)

文档中有a section about that

var require = patchRequire(global.require);
require('./user');

在您的情况下,您应该使用global.require,因为您正在使用CoffeeScript。