我如何编写测试来模拟和处理 nodejs 中的 JSON 解析错误

How can I write test to mock and handle JSON parsing error in nodejs

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

var data;

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

我如何编写测试来使用 assert 或 mocha 模拟和测试 JSON 解析错误?我希望测试 confirm/assert 解析 JSON.

没有错误

您应该只使用 before 挂钩来设置您的测试,而不是断言您尝试测试的代码的行为符合您的预期(有关挂钩及其使用的更多信息摩卡 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' 文件中存在的属性和值。

例如,如果您使用 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' });
});