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

How to import other javascript module in PhantomJS or CasperJS

本文关键字:导入 其他 javascript 模块 CasperJS PhantomJS      更新时间:2023-09-26

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

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

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

从1.1开始,CasperJS依赖PhantomJS的原生require():
https://groups.google.com/forum/#!topic/fintomjs/0-DYNn_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

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

require "./user-module.coffee"

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

文档中有一节关于这一点

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

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