Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何模拟从fs.readFile返回的错误以进行测试?_Node.js_Unit Testing_Mocha.js_Fs_Chai - Fatal编程技术网

Node.js 如何模拟从fs.readFile返回的错误以进行测试?

Node.js 如何模拟从fs.readFile返回的错误以进行测试?,node.js,unit-testing,mocha.js,fs,chai,Node.js,Unit Testing,Mocha.js,Fs,Chai,我是测试驱动开发的新手,正在尝试为我的应用程序开发一个自动化测试套件 我已经成功地编写了验证从成功调用Node的fs.readFile方法收到的数据的测试,但正如您在下面的屏幕截图中所看到的,当我使用伊斯坦布尔模块测试覆盖率时,它正确地显示我没有测试从fs.readFile返回错误的情况 我该怎么做?我有一种预感,我必须模拟一个文件系统,我已经尝试使用mock fs模块,但没有成功。文件的路径在函数中是硬编码的,我正在使用rewire从应用程序代码中调用未报告的函数。因此,当我使用rewire

我是测试驱动开发的新手,正在尝试为我的应用程序开发一个自动化测试套件

我已经成功地编写了验证从成功调用Node的fs.readFile方法收到的数据的测试,但正如您在下面的屏幕截图中所看到的,当我使用伊斯坦布尔模块测试覆盖率时,它正确地显示我没有测试从fs.readFile返回错误的情况

我该怎么做?我有一种预感,我必须模拟一个文件系统,我已经尝试使用mock fs模块,但没有成功。文件的路径在函数中是硬编码的,我正在使用rewire从应用程序代码中调用未报告的函数。因此,当我使用rewire的getter方法访问getAppStatus函数时,它使用真正的fs模块,因为这是getAppStatus所在的async.js文件中使用的模块

下面是我正在测试的代码:

// check whether the application is turned on
function getAppStatus(cb){
  fs.readFile(directory + '../config/status.js','utf8', function(err, data){
    if(err){
      cb(err);
    }
    else{
      status = data;
      cb(null, status);
    }
  });
}
以下是我为返回数据的情况编写的测试:

  it('application should either be on or off', function(done) {
      getAppStatus(function(err, data){
        data.should.eq('on' || 'off')

        done();
      })
  });
我使用Chai作为断言库,并使用Mocha运行测试


非常感谢允许我模拟从fs.readFile返回的错误以编写此场景的测试用例的任何帮助。

最好使用
mock fs
,如果您不提供任何文件,它将返回enoint。 只是要小心在测试后调用restore,以避免对其他测试造成任何影响

在开头加上

  var mock = require('mock-fs');
测试呢

before(function() {
  mock();
});
it('should throw an error', function(done) {
  getAppStatus(function(err, data){
    err.should.be.an.instanceof(Error);
    done();
  });
});
after(function() {
  mock.restore();
});

太棒了,谢谢你的帮助,我用我的测试套件在几分钟内就可以让它工作了。我肯定会遇到更多的障碍,因为我得到了这个应用程序的其余部分,希望我可以拍摄的问题,你的方式再次当我遇到那些肯定会到来的混乱。再次感谢您的帮助!:)