3

我正在 casperjs 中进行一些单元测试,但我被卡住了:如何从测试本身包含依赖文件?包含的javascript文件可以只是一堆函数,并且不声明任何接口(module.exports = ...等)。

我知道我可以从命令行中包含

$ 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();
});

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

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

4

3 回答 3

5

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

phantom.injectJs('settings.js'); 

casper.test.begin(...
...
于 2015-11-19T21:10:20.657 回答
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');
  }
};
于 2013-08-18T15:32:25.407 回答
2

我发现这个示例演示--includes选项很有用:

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

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

于 2014-07-01T15:47:35.027 回答