Jest - Проверка и проверка файловой системы node.js - PullRequest
0 голосов
/ 16 октября 2019

Я создал функцию, которая в основном перебирает массив и создает файлы. Я начинаю тестировать, используя Jest, чтобы обеспечить дополнительную безопасность, чтобы убедиться, что все работает, однако я испытываю некоторые проблемы, пытаясь насмехаться над файловой системой Node.js.

Эта функция мне нужнапроверить - function.ts :

export function generateFiles(root: string) {
  fs.mkdirSync(path.join(root, '.vscode'));
  files.forEach((file) => {
    fs.writeFileSync(
      path.join(root, file.path, file.name),
      fs.readFileSync(path.join(__dirname, 'files', file.path, file.name), 'utf-8')
    );
  });
}

const files = [
  { name: 'tslint.json', path: '' },
  { name: 'tsconfig.json', path: '' },
  { name: 'extensions.json', path: '.vscode' },
];

Я читал вокруг, но не могу понять, как проверить это с помощью шутки. Нет примеров для просмотра. Я попытался установить mock-fs, что должно быть простым способом запуска и запуска с фиктивной версией модуля Node.js FS, но я, честно говоря, не знаю, с чего начать. Это моя первая попытка сделать простой тест - который вызывает ошибку, говорит «нет такого файла или каталога» - function.test.ts :

import fs from 'fs';
import mockfs from 'mock-fs';

beforeEach(() => {
  mockfs({
    'test.ts': '',
    dir: {
      'settings.json': 'yallo',
    },
  });
});

test('testing mock', () => {
  const dir = fs.readdirSync('/dir');
  expect(dir).toEqual(['dir']);;
});

afterAll(() => {
  mockfs.restore();
});

Любой, кто может указатьменя в правильном направлении?

1 Ответ

1 голос
/ 16 октября 2019

Поскольку вы хотите протестировать свою реализацию, вы можете попробовать это:

import fs from 'fs';
import generateFiles from 'function.ts';

// auto-mock fs
jest.mock('fs');

describe('generateFiles', () => {
  beforeAll(() => {
    // clear any previous calls
    fs.writeFileSync.mockClear();


    // since you're using fs.readFileSync
    // set some retun data to be used in your implementation
    fs.readFileSync.mockReturnValue('X')

    // call your function
    generateFiles('/root/test/path');
  });

  it('should match snapshot of calls', () => {
    expect(fs.writeFileSync.mock.calls).toMatchSnapshot();
  });

  it('should have called 3 times', () => {
    expect(fs.writeFileSync).toHaveBeenCalledTimes(3);
  });

  it('should have called with...', () => {
    expect(fs.writeFileSync).toHaveBeenCalledWith(
      '/root/test/path/tslint.json',
      'X' // <- this is the mock return value from above
    );
  });
});

Здесь вы можете узнать больше об автомоделировании

...