在Intern中动态创建功能测试时读取本地JSON文件

时间:2018-10-05 18:02:14

标签: json dojo intern

我正在使用Intern v4和dojo 1.7动态创建功能测试。为此,我将registerSuite分配给一个变量,并将每个测试附加到registerSuite中的Tests属性:

var registerSuite = intern.getInterface('object').registerSuite;
var assert = intern.getPlugin('chai').assert;

// ...........a bunch more code .........

registerSuite.tests['test_name'] = function() {

    // READ JSON FILE HERE
    var JSON = 'filename.json';

    // ....... a bunch more code ........
}

那部分效果很好。我面临的挑战是,我需要为动态创建的每个测试从不同的JSON文件读取信息。我似乎找不到在dojo javascript运行时读取JSON文件的方法(我想在registerSuite.tests函数中称其为// READ JSON FILE HERE的地方调用它)。我尝试过dojo的xhr.get,节点的fs,实习生的this.remote.get,似乎什么都没用。

我可以使用define(['dojo/text!./generated_tests.json'])获取静态JSON文件,但这对我没有帮助,因为存在数量不明的JSON文件,文件名未知,因此我没有需要调用它们的信息。声明块。

如果我的描述不清楚,请告诉我。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

由于您正在创建功能测试,因此它们将始终在Node中运行,因此您可以访问Node环境。这意味着您可以执行以下操作:

var registerSuite = intern.getPlugin('interface.object').registerSuite;
var assert = intern.getPlugin('chai').assert;

var tests = {};
tests['test_name'] = function () {
    var JSON = require('filename.json');
    // or require.nodeRequire('filename.json')
    // or JSON.parse(require('fs').readFileSync('filename.json', {
    //      encoding: 'utf8'
    //    }))
}

registerSuite('my suite', tests);

要记住的另一件事是为registerSuite.tests分配值实际上不会(也不应该)做任何事情。您需要调用registerSuite,并将其套件名称和测试对象传递给它,以实际注册测试。