嘲笑文件

时间:2018-11-12 15:29:38

标签: javascript node.js mocking jestjs

我无法在node.js中创建带有笑话的json文件。

我尝试过:

const mock = require('mock-fs');
mock({
    'test.json': [{ 'name':'John', 'age':30, 'car':null }]
});

但这不起作用,他不喜欢文件内容中的参数。

你有一个想法吗?谢谢

2 个答案:

答案 0 :(得分:0)

因此,这是一个示例测试用例。不知道您是否知道了,但这是我使用的。这是打字稿,但您可以将其转换为js

import mock from 'mock-fs';
import pump from 'pump';
import * as util from 'util';
const fileReadPromisfy = util.promisify(fs.readFile);

....
describe('Test suite for bucket functionality', () => {
    beforeEach(() => {
        mock({
            'sample-file.txt': 'Content of the sample file',
            'sample-upload.txt': '',
        });
    });
test('test mock fs', async (done) => {
        pump(fs.createReadStream('sample-file.txt'), fs.createWriteStream('sample-upload.txt'));
        fileReadPromisfy('sample-upload.txt')
            .then((data) => {
                expect(fs.readFileSync('sample-upload.txt')).toBeDefined();
                done();
            })
            .catch((err) => {
                done();
            });
    });
});

答案 1 :(得分:0)

修改了以上发现的用于笑话的要点:

将此添加到您的 jest.setup.js

// mock file
class MockFile {
  constructor ({ name = 'mock.jpg', size = 1024, type = 'image/jpg', lastModified = new Date() }) {
    var blob = new Blob(['a'.repeat(size)], { type })
    blob.lastModifiedDate = lastModified

    return new File([blob], name)
  }
}

global.MockFile = MockFile

像这样在测试中使用它:

const mockFile = new MockFile({ 
  name: 'testFile',
  type: 'image/jpg',
  size: 512
})