如何从karma测试中访问json文件

时间:2016-02-29 12:15:50

标签: json typescript jasmine karma-runner

我正在尝试为我的typescript类创建一个测试,该类从json文件中读取数据。

readData<T>(filePath: string): Promise<T> {
    return Qajax.getJSON(filePath);
}

我正在使用Jasmine和karma环境进行测试。我的问题是,即使我在业力中添加任何json文件,它也不会被加载到chrome启动器中

    files: [
        'libs/angular/angular.js',
        'libs/angular/angular-route.js',
        'libs/angular/angular-mocks.js',            
        'libs/collections/collections.js',
        'tests/framework/common/app_config.json',
        'tests/package.json',

        { pattern: 'libs/qajax/qajax.js', included: false },
        { pattern: 'libs/q/q.js', included: false },

        { pattern: 'tests/framework/**/*.js', included: false },
        { pattern: 'tests/toolpattern/**/*.js', included: false },
        { pattern: 'tests/test-main.js', included: true },

    ]

正如您在上面的karma配置中所看到的,我添加了一个名为app_config.json的文件。现在我试图从测试中读取该文件...

it("read data test.", function (done) {

    var promise = configurationAccessorImpl.readData("tests/framework/common/app_config.json");
    promise.then(result => {
        console.info("Get configuration test - Success.");
    }, error => {
        console.log(error);
    });

});

由于json文件不存在,测试总是失败..

2 个答案:

答案 0 :(得分:1)

库jasmine-jquery为Jasmine JavaScript测试框架提供了几个扩展。 使用扩展API处理测试规范中的HTML,CSS和JSON fixture,以读取.json文件。

步骤: - 将jasmine-jquery.js添加到libs&amp; jasmine-jquery.d.ts到/ libs / typings ,将karma.config中的必需引用添加到libs,添加JSON fixture位置以从以下位置读取文件:

import sys
print sys.version
2.7.11 |Anaconda 2.3.0 (64-bit)| (default, Jan 29 2016, 14:26:21) [MSC v.1500 64 bit (AMD64)]

- 现在在karma测试中,可以按如下方式读取文件:

   // list of files / patterns to load in the browser
    files: [
   …………………………..
        'libs/jquery/jquery-1.9.1.js',
        'libs/jasmine-jquery/jasmine-jquery.js',
   ………………….
          // JSON fixture
        {
            pattern: 'configuration/*.json',
            watched: true,
            served: true,
            included: false
        }
    ],

答案 1 :(得分:0)

目前尚不清楚configurationAccessorImpl.readData函数的作用。但是,如果您尝试使用HTTP请求加载JSON文件,那么您可能会遇到karma从/ base相对路径提供测试文件这一事实的问题。

尝试将测试更改为:

var promise = configurationAccessorImpl.readData("/base/tests/framework/common/app_config.json");

它可能会起作用。