Dependency injection casperjs:如何在单元测试期间在测试本身中包含其他javascript文件?

Dependency injection casperjs:如何在单元测试期间在测试本身中包含其他javascript文件?,dependency-injection,casperjs,Dependency Injection,Casperjs,我正在casperjs中进行一些单元测试,我遇到了一个难题:如何从测试本身包含依赖项文件?包含的javascript文件可以只是一组函数,并且不声明任何接口(module.exports=…等) 我知道我可以从命令行包括 $casperjs test--include=./my-mock.js mytest.js 但是我如何包含来自测试本身的文件呢 把下面的内容放在上面对我不起作用。。。我的mock没有定义 casper.options.clientScripts=[”/my mock.js“]

我正在casperjs中进行一些单元测试,我遇到了一个难题:如何从测试本身包含依赖项文件?包含的javascript文件可以只是一组函数,并且不声明任何接口(module.exports=…等)

我知道我可以从命令行包括

$casperjs test--include=./my-mock.js mytest.js

但是我如何包含来自测试本身的文件呢

把下面的内容放在上面对我不起作用。。。我的mock没有定义
casper.options.clientScripts=[”/my mock.js“]//push()也没有帮助

//mytest.js is below
// ------------------------------------------
casper.test.begin('ajax mock test', function suite(test) {

  my_mock.setFetchedData("bla");

  my_mock.doRequest();

  test.assertEquals( ......);

  test.done();
});

// ------------------------------------------

CasperJS版本1.1.0-DEV使用phantomjs版本1.9.1

之所以
clientScripts
不起作用,是因为每次页面加载时都会加载它,所以在调用
casper.evaluate()
之外,您无法访问文件中定义的对象/函数

您可以使用
require()
来拉入模块,但是您可能需要修改包含的脚本以使用此方法

以下是我将您的
mytest.js
更改为:

var my_mock=require('my-mock');
casper.test.begin('ajax模拟测试',函数套件(测试){
我的模拟设置获取数据(“bla”);
我的_mock.doRequest();
//测试。资产质量(…);
test.done();
});
这是一个快速脚本(
my mock.js
),当您使用所提供的函数时,我会将它组合起来打印出来

module.exports={
setFetchedData:函数(a){
log('setFetchedData:'+a);
},
doRequest:函数(){
console.log('doRequest');
}
};
我发现这个演示
很有用--包括
选项:

$ casperjs test tests/ --pre=pre.js --includes=inc.js --post=post.js

加载测试中经常使用的函数。

使用phantom.injectJs方法是迄今为止我发现的最佳选择。例如,您的目录中有两个文件:“tests.js”和“settings.js”。您希望在“test.js”中包含“settings.js”。使用“test.js”应该做的第一件事是编写以下内容:

phantom.injectJs('settings.js'); 

casper.test.begin(...
...

谢谢,如果您希望包含符合某些特定格式(module.exports=…)的javascript文件,这就是解决方案。在我的例子中,我需要包括任何javascript文件,它可以是一堆函数。。。有办法吗?我已经更新了我的问题。