Javascript NodeJS使用mock fs测试writeFile

Javascript NodeJS使用mock fs测试writeFile,javascript,node.js,unit-testing,mocking,Javascript,Node.js,Unit Testing,Mocking,例如,我有以下文件: spec/config/file mock.js var mock = require('mock-fs'); mock({ 'files': { 'expense.csv': 'a;b;c;d\n1;2;3;4\n5;6;7;8' } }); var fs = require('fs'); var reader = { read: function(path) { return fs.readFileSync(path, 'utf

例如,我有以下文件:

spec/config/file mock.js

var mock = require('mock-fs');
mock({
  'files': {
    'expense.csv': 'a;b;c;d\n1;2;3;4\n5;6;7;8'
  }
});
var fs = require('fs');
var reader = {
    read: function(path) {
        return fs.readFileSync(path, 'utf8');
    },
    write: function(path, object) {
        fs.writeFileSync(path, object);
    }
};
module.exports = reader;
describe('reader.js test', function(){
    var reader = require('./reader.js');
    var mock = require('mock-fs');
    it('should return a simple string', function(){
        expect(reader.read('files/expense.csv')).toEqual('a;b;c;d\n1;2;3;4\n5;6;7;8');
    });
    it('should write a json object', function(){
        // WHAT TO DO?!
    });
});
app/reader/reader.js

var mock = require('mock-fs');
mock({
  'files': {
    'expense.csv': 'a;b;c;d\n1;2;3;4\n5;6;7;8'
  }
});
var fs = require('fs');
var reader = {
    read: function(path) {
        return fs.readFileSync(path, 'utf8');
    },
    write: function(path, object) {
        fs.writeFileSync(path, object);
    }
};
module.exports = reader;
describe('reader.js test', function(){
    var reader = require('./reader.js');
    var mock = require('mock-fs');
    it('should return a simple string', function(){
        expect(reader.read('files/expense.csv')).toEqual('a;b;c;d\n1;2;3;4\n5;6;7;8');
    });
    it('should write a json object', function(){
        // WHAT TO DO?!
    });
});
app/reader/reader.spec.js

var mock = require('mock-fs');
mock({
  'files': {
    'expense.csv': 'a;b;c;d\n1;2;3;4\n5;6;7;8'
  }
});
var fs = require('fs');
var reader = {
    read: function(path) {
        return fs.readFileSync(path, 'utf8');
    },
    write: function(path, object) {
        fs.writeFileSync(path, object);
    }
};
module.exports = reader;
describe('reader.js test', function(){
    var reader = require('./reader.js');
    var mock = require('mock-fs');
    it('should return a simple string', function(){
        expect(reader.read('files/expense.csv')).toEqual('a;b;c;d\n1;2;3;4\n5;6;7;8');
    });
    it('should write a json object', function(){
        // WHAT TO DO?!
    });
});
reader.read
函数与一起工作正常


但是我正在测试
reader.write
函数,我在文档中没有找到任何关于“write”函数的内容。有人已经解决了这个问题吗?

当@Strech在评论中发布时,您可以在调用reader.write后在reader.read上尝试expect,以检查内容是否已写入假文件

我想有更好的方法来测试这个功能,更严格地遵守单元测试原则。我们知道,fs模块之所以有效,是因为它是节点核心模块的一部分,并且在那里进行了测试,因此我们可以模拟fs方法,并检查这些方法是否使用预期参数调用,例如使用:


你有没有试着先做一个reader.write,然后做一个expect on reader.read<代码>reader.write('/temp/foo.txt',bar');expect(reader.read('temp/foo.txt')。toEqual('bar')在找到您的评论之前,我一直面临着同样的问题。Mock fs模拟整个fs模块,因此当您编写时,您实际上不是在系统上编写,而是在Mock fs对象中编写。