【问题标题】:Read local JSON files when dynamically creating functional tests in Intern在 Intern 中动态创建功能测试时读取本地 JSON 文件
【发布时间】:2018-10-05 18:02:13
【问题描述】:

我正在使用 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,node的fs,实习生的this.remote.get,好像都没用。

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

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

【问题讨论】:

    标签: json dojo intern


    【解决方案1】:

    由于您要创建功能测试,它们将始终在 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,将您的套件名称和测试对象传递给它,以实际注册测试。

    【讨论】:

    • 谢谢@jason0x43!对 FS 的引用是似乎最适合我的解决方案。我必须使用define([ 'dojo/json', 'dojo/node!fs'], function(JSON, fs)) 导入对节点FS 的引用,然后我才能调用JSON.parse(fs.readFileSync(eachTest, 'utf8')); 并加载文件。从那里一切都很好。
    猜你喜欢
    • 1970-01-01
    • 2021-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-23
    • 1970-01-01
    • 2016-02-11
    • 2014-08-26
    相关资源
    最近更新 更多