casperjs:如何在测试自己的单元测试中包含其他javascript文件?

时间:2013-08-18 07:52:32

标签: dependency-injection casperjs

我正在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

3 个答案:

答案 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

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