gpt4 book ai didi

javascript - NodeJS 使用 mock-fs 测试 writeFile

转载 作者:数据小太阳 更新时间:2023-10-29 04:21:13 25 4
gpt4 key购买 nike

例如,我有以下文件:

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'
}
});

app/reader/reader.js

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

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 函数与 mock-fs 一起工作正常.

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

最佳答案

正如@Strech 在评论中发表的那样,您可以在调用 reader.write 之后尝试对 reader.read 进行 expect 以检查内容是否已写入假文件。

恕我直言,有一种更好的方法来测试此功能,更符合单元测试原则。我们知道 fs 模块可以工作,因为它是 Node 核心模块的一部分并且在那里进行了测试,所以我们可以模拟 fs 方法,而是检查这些方法是否以预期的方式被调用参数,例如使用 Sinon :

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);
});
});

关于javascript - NodeJS 使用 mock-fs 测试 writeFile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40767638/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com