javascript 当fs.readFileSynch也抛出错误时,Sinon Stub不会抛出错误

g9icjywg  于 2023-02-07  发布在  Java
关注(0)|答案(2)|浏览(118)

在通过Sinon/Chai/Mocha清除readFile/Sync的所有相关问题后,测试失败。
有一个基本的getFile函数可以检索文件:

function getFile(path) {
const file = fs.readFileSync(path, "utf8)
return file;
}

module.exports = {getFile}

我想创建一个测试,如果fs. readFileSync也抛出错误,getFile应该抛出错误:
it('如果fs.readFileSync抛出错误,则应抛出错误',()=〉{
我试过:

it('should throw an error if fs.readFileSync throws an error', () => {
  const error = new Error('some error message')
  const myStub = sinon.stub(fs, "readFileSync")
    myStub.throws(error)
  const filePath = "/Project/test.js" 
  const gFile = index.getFile(filePath)

  try {
    if(myStub.error === true) {
          gFile(error)       
  } catch (error) {
    expect(myStub).to.throw(error)

我得到的是:
1个失败错误:Context.at Process.processImmediate中一些错误消息

hmae6n7t

hmae6n7t1#

请参见throw()上的chai expect docs。有以下示例:

var badFn = function () { throw new TypeError('Illegal salmon!'); };

expect(badFn).to.throw();

您可以看到expect(badFn)得到的是badFn,而不是badFn(),因此在测试中没有任何地方是badFn实际上被 * 调用 * 的。
这意味着expect调用badFn,实际上,expect需要调用它,因为它需要捕获错误。
因此,在代码中,尝试以下操作:

const stub = sinon.stub(fs, 'readFileSync').throws();

const callGetFile = () => {
    index.getFile('some_file');
};

expect(callGetFile).to.throw();
c90pui9n

c90pui9n2#

尝试将error函数放入Sinon throw方法中,如下所示。

myStub.throws(new Error('some error message'));

相关问题