7

我正在尝试使用 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

4

3 回答 3

11

在尝试了许多其他建议(每个都希望在其相应环境的上下文中工作)之后,找到这个解决方案:

phantom.page.injectJs( 'script.js');
于 2014-01-07T05:16:57.600 回答
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"]

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

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

使用要求

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

require "./user-module.coffee"

然后在用户模块中你也可以使用require。使用 require 路径是相对于当前文件(调用 require )解析的。
如果在用户模块中要导入 casper 库,则需要修补 require,检查:https ://casperjs.readthedocs.org/en/latest/writing_modules.html

于 2013-07-18T09:13:03.593 回答
2

文档中有一个关于此的部分

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

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

于 2013-07-16T10:20:40.867 回答