我如何编写测试以模拟和处理Node.js中的JSON解析错误

时间:2019-06-05 08:14:41

标签: javascript node.js unit-testing mocha assert

我正在使用test.js文件中的以下代码从JSON类型文件中检索JSON数据进行测试

var data;

  before(function(done) {
    data = JSON.parse(fs.readFileSync(process.cwd() + '/path/to/data.json', 'utf8'));
    done();
  });

如何编写一个使用assert或mocha模拟和测试JSON解析错误的测试?我希望测试确认/声明解析JSON时没有错误。

1 个答案:

答案 0 :(得分:0)

您仅应使用before钩子来进行测试的设置,而不要断言您要测试的代码的行为符合您的预期(有关钩子及其在Mocha中的使用的更多信息, documentation

要断言您要测试的代码确实符合预期,应该将代码放入it中。

考虑到这一点,您可以在before钩子中读取json文件的原始数据(因为这是测试的设置),然后在测试中编写json字符串的解析:

var rawData;

before(function() {
    // No need to use 'done' since we are performing a synchronous task
    rawData = fs.readFileSync(process.cwd() + '/path/to/data.json', 'utf8');
});

it('should correctly parse the json', function() {
    var data = JSON.parse(rawData);

    // Your expectations about data would be placed here.
});

为了达到期望,可以使用any assertion library you want,并且应该检查data是否具有“ path / to / data.json”文件中存在的属性和值。 / p>

例如,如果您使用chai库进行断言,而您的data.json文件具有以下内容:

{ key1: 'value1', key2: 'value2' }

您可以写断言:

it('should correctly parse the json', function() {
    var data = JSON.parse(rawData);

    // Your expectations about data would be placed here.
    expect(data).to.deep.equal({ key1: 'value1', key2: 'value2' });
});