首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用模拟fs测试NodeJS writeFile

用模拟fs测试NodeJS writeFile
EN

Stack Overflow用户
提问于 2016-11-23 14:52:33
回答 1查看 5.3K关注 0票数 11

例如,我有以下文件:

spec/config/file-mock.js

代码语言:javascript
复制
var mock = require('mock-fs');
mock({
  'files': {
    'expense.csv': 'a;b;c;d\n1;2;3;4\n5;6;7;8'
  }
});

app/reader/reader.js

代码语言:javascript
复制
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;

app/reader/reader.spec.js

代码语言:javascript
复制
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函数在模拟fs中运行得很好。

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

EN

回答 1

Stack Overflow用户

发布于 2019-06-12 16:47:11

正如@Strech在评论中发布的那样,在调用reader.read后,您可能会在reader.write上尝试使用expect来检查内容是否已写入假文件。

IMHO有一种更好的方法来测试这个功能,更多地坚持单元测试原则。我们知道fs模块可以工作,因为它是节点核心模块的一部分,并且在那里进行了测试,因此我们可以模拟fs方法,并检查这些方法是否使用预期的参数调用,例如使用西农

代码语言:javascript
复制
const Reader = require('../reader.js');
const sinon = require('sinon');
const fs = require('fs');
const expect = require('expect.js');

describe('reader.js test', function () {

  let readFileSync;
  let writeFileSync;

  beforeEach(() => {
    readFileSync = sinon.stub(fs, 'readFileSync').returns({});
    writeFileSync = sinon.stub(fs, 'writeFileSync').returns({});
  });
  afterEach(() => {
    readFileSync.restore();
    writeFileSync.restore();
  });

  it('should return a simple string', () => {

    Reader.read('files/expense.csv');
    expect(readFileSync.calledOnceWith('files/expense.csv', 'utf8')).to.be(true);
  });

  it('should write a json object', () => {

    Reader.write('files/expense.csv', 'test');
    expect(writeFileSync.calledOnceWith('files/expense.csv', 'test')).to.be(true);
  });
});
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40767638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档