【问题标题】:How to test NodeJS fs using Mocha/Chai/Sinon?如何使用 Mocha/Chai/Sinon 测试 NodeJS fs?
【发布时间】:2017-10-08 06:04:27
【问题描述】:

我想使用 Mocha/Chai/Sinon 从我的 History 课程中测试以下方法,如何?

/**
 * Load the history from the history file.
 * @return {this}
 */
load() {
  const file = historyFilePath();

  if (!fs.existsSync(file)) {
    return this;
  }

  const json = fs.readFileSync(file, 'utf8');
  const data = JSON.parse(json);

  this.ary = data;

  return this;
}

全班是here

我已经注意到 answer 依赖于 rewire,但我想避免额外的依赖,并且 rewire 也与 babel 不兼容。

【问题讨论】:

  • 您可以使用诗乃stubs
  • @robertklep 我已经注意到了,我就是无法让它工作。
  • 如果您共享不起作用的代码,人们会更容易帮助您。
  • @robertklep 我最好承认,当涉及到 sinon 存根和测试 fs 时,我不知道从哪里开始。恐怕还没有测试代码。
  • 这里有一些东西可以帮助您入门:gist.github.com/robertklep/6f6b9aacf80f16334883c647d41c9d12 它存根 fs.existsSync 始终返回 false,并且存根还用于检查是否使用正确的文件名调用它。

标签: node.js mocha.js sinon


【解决方案1】:

假设 HistoryFile 始终具有相同的结构,一种方法是测试您是否获得了具有正确属性的对象。

例如,如果您的历史 JSON 文件是这样的

{
    "History": {
        "Name": "Test"
    }
}

你可以这样写你的摩卡咖啡:

it('should return a correct object', function() {
  const loadedObject = historyUtil.load();

  expect(loadedObject).to.have.property("History");
  expect(loadedObject.History).to.have.property("Name","Test");
}

如果出现以下情况,此测试应该失败:

  1. FS 找不到/读取文件
  2. JSON.parse 没有得到可解析的字符串
  3. HistoryFile 架构会改变,例如版本更改。

【讨论】:

  • 对,但我想存根 fs - 这是在文件系统无法访问或远程连接速度较慢的情况下进行测试的正确方法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 2018-04-08
  • 2017-10-23
  • 2023-04-11
  • 1970-01-01
  • 2023-03-22
  • 2019-02-03
相关资源
最近更新 更多