我正在casperjs中进行一些单元测试而且卡住了:如何从测试本身中包含依赖文件?包含的javascript文件可能只是一堆函数,并没有声明任何接口(module.exports = ... etc)。
我知道我可以从命令行中包含
$ casperjs test --include=./my-mock.js mytest.js
但我怎样才能包含测试本身的文件?
将以下内容放在顶部对我不起作用... my_mock未定义
casper.options.clientScripts = ["./my-mock.js"]; //push() does not help either
//mytest.js is below
// ------------------------------------------
casper.test.begin('ajax mock test', function suite(test) {
my_mock.setFetchedData("bla");
my_mock.doRequest();
test.assertEquals( ......);
test.done();
});
// ------------------------------------------
使用phantomjs版本1.9.1的CasperJS版本1.1.0-DEV
答案 0 :(得分:5)
使用phantom.injectJs方法是我迄今为止找到的最佳选择。例如。你的目录中有两个文件:“tests.js”和“settings.js”。您想将“settings.js”包含在“test.js”中。你应该对你的“test.js”做的第一件事是写下面的内容:
phantom.injectJs('settings.js');
casper.test.begin(...
...
答案 1 :(得分:3)
clientScripts
不起作用的原因是它在每个页面加载时加载,因此您无法访问casper.evaluate()
调用之外的文件中定义的对象/函数
您可以使用require()
来提取模块,但是您可能需要修改包含的脚本才能使用此方法。
以下是我将mytest.js
更改为:
var my_mock = require('my-mock');
casper.test.begin('ajax mock test', function suite(test) {
my_mock.setFetchedData("bla");
my_mock.doRequest();
//test.assertEquals( ... );
test.done();
});
这是一个快速的脚本(my-mock.js
),当你使用你提供的功能时,我将它拼凑在一起打印出来。
module.exports = {
setFetchedData: function(a) {
console.log('setFetchedData: ' + a);
},
doRequest: function() {
console.log('doRequest');
}
};
答案 2 :(得分:2)
我发现有用的sample证明了--includes
选项:
$ casperjs test tests/ --pre=pre.js --includes=inc.js --post=post.js
加载您经常在测试中使用的函数。