1

我正在使用 casperjs 为我的 GUI 编写测试套件。我已将代码拆分为由主脚本调用的模块。

我似乎无法将 javascript 对象传递给我的模块。我正在读取一个 json 配置文件,将其转换为一个对象,然后我想将它传递给我的模块。

testSuite.js(主脚本):

var casper = require('casper').create();
var test1 = require('../jstests/admin/auth');
var config = {};

casper.start('http://localhost:8080/ipiadmin', function() {});

var fs = require('fs');
configFile = fs.read('./jstests/admin/config.json');
casper.then(function() {
  config = JSON.parse(configFile);
});
casper.then(function() {
  this.echo("username: " + config.username);  // outputs the name correctly
});

test1.runTest(casper, config, "testme");

casper.run(function() {
    this.test.done();
    this.test.renderResults(true);
});

auth.js(模块)

 exports.runTest = function auth(casper, config, test) {

  /*** Login ***/  
  casper.waitFor(function() {
    this.echo("test: " + test);  // "test: testme"
    this.echo("username: " + config.username);  // "username: undefined"
    return true;
  });

  return true;
}

config.json(配置文件)

{
  "username": "something",
  "password": "secret"
}

当我运行上述内容时,我得到:

Test file: jstests/admin/testSuite.js                                           
username: something
--- Running auth ---
test: testme
username: undefined

我猜我可能可以将文件内容作为字符串传递,然后将其转换为模块中的对象,但这对我来说似乎不太正确。

有没有其他人试过这个?成功地?

4

1 回答 1

1

看起来你只需要包装test1.runTest(casper, config, "testme");一个Casper#then声明,就像这样。

var casper = require('casper').create();
var test1 = require('../jstests/admin/auth');
var config = {};

casper.start('http://localhost:8080/ipiadmin', function() {});

var fs = require('fs');
configFile = fs.read('./jstests/admin/config.json');
casper.then(function() {
  config = JSON.parse(configFile);
});
casper.then(function() {
  this.echo("username: " + config.username);  // outputs the name correctly
});

// ---
casper.then(function() {
  test1.runTest(casper, config, "testme");
});
// ---

casper.run(function() {
  this.test.done();
  this.test.renderResults(true);
});

使用 PhantomJS 1.9.1 和 CasperJS 1.1.0(主分支)进行测试。

于 2013-06-27T01:11:39.717 回答