Насмешливая ошибка чтения конкретного файла для тестов в Node.js - PullRequest
0 голосов
/ 16 ноября 2018

Можно ли, скажем так, с помощью библиотеки "mock-fs" издавать какие-то ошибки чтения файлов?В частности, я хочу проверить этот случай (где code !== 'ENOENT'):

fs.readFile(filePath, (err, data) => {
    if (err) {
        if (err.code !== 'ENOENT') { 
            return done(new ReadingFileError(filePath));
        }
    }
    // ... 
});

Я не мог найти ничего об эмуляции ошибок чтения в их документах.Может быть, есть другие библиотеки, которые могут это сделать.

1 Ответ

0 голосов
/ 16 ноября 2018

Насколько я знаю mock-fs издевается над файловой системой, а не утилитой узла. Конечно, в некоторых случаях вы можете использовать это для тестирования утилиты fs, но я думаю, что ваш вариант использования не входит в их число.

Вот пример с sinon.sandbox

Некоторые альтернативы:

Обратите внимание, что я немного запутался, откуда взялся ReadingFileError, так что я думаю, вы пытаетесь реализовать пользовательскую ошибку. Если это так, возможно, это также будет полезно. В примере я заменил это на простой new Error('My !ENOENT error').

// readfile.js
'use strict'

const fs = require('fs')

function myReadUtil (filePath, done) {
  fs.readFile(filePath, (err, data) => {
    if (err) {
      if (err.code !== 'ENOENT') {
        return done(err, null)
      }
      return done(new Error('My ENOENT error'), null)
    }
    return done(null, data)
  })
}

module.exports = myReadUtil

// test.js
'use strict'

const assert = require('assert')
const proxyquire = require('proxyquire')

const fsMock = {
  readFile: function (path, cb) {
    cb(new Error('My !ENOENT error'), null)
  }     
}


const myReadUtil = proxyquire('./readfile', { 'fs': fsMock })

myReadUtil('/file-throws', (err, file) => {
  assert.equal(err.message, 'My !ENOENT error')
  assert.equal(file, null)
})

Редактировать : Реорганизован пример использования обратного вызова в стиле узла вместо throw и try/catch

...