шутя тестирование функции fs.unlink - PullRequest
0 голосов
/ 07 апреля 2020

Я хотел бы использовать mock.fs в jest для проверки этой функции deleteFile, но я не уверен, как.

function deleteFile(fileName) {
  fs.unlink(fileName, (err) => {
    if (err) throw err;
    console.log('file was deleted.')
  }) 
};

Это то, что я пытался на основе того, что уже опубликовано в Stackoverflow, но функция не возвращается.

const fs = require('fs')

jest.mock('fs');

test('mock delete', () => {
  const mockDelete = jest.fn(fs.unlink(fs, (err) => {
    if (err) throw err;

    else {
      console.log('file was deleted.');
      return True;
    }

  }))

  expect(mockDelete).toHaveReturnedWith(1)

})

1 Ответ

0 голосов
/ 08 апреля 2020

Вот решение для модульного теста:

index.js:

const fs = require('fs');

export function deleteFile(fileName) {
  fs.unlink(fileName, (err) => {
    if (err) throw err;
    console.log('file was deleted.');
  });
}

index.test.js:

const { deleteFile } = require('./');
const fs = require('fs');

jest.mock('fs', () => {
  const mFs = { unlink: jest.fn() };
  return mFs;
});

describe('61082732', () => {
  afterEach(() => {
    jest.restoreAllMocks();
  });
  it('should unlink file', () => {
    fs.unlink.mockImplementationOnce((filename, callback) => {
      callback(null);
    });
    const logSpy = jest.spyOn(console, 'log');
    const filename = 'avatar.jpg';
    deleteFile(filename);
    expect(fs.unlink).toBeCalledWith(filename, expect.any(Function));
    expect(logSpy).toBeCalledWith('file was deleted.');
  });

  it('should throw an error', () => {
    const mError = new Error('not found');
    fs.unlink.mockImplementationOnce((filename, callback) => {
      callback(mError);
    });
    const logSpy = jest.spyOn(console, 'log');
    const filename = 'avatar.jpg';
    expect(() => deleteFile(filename)).toThrowError(mError);
    expect(fs.unlink).toBeCalledWith(filename, expect.any(Function));
    expect(logSpy).not.toBeCalled();
  });
});

Результаты модульного теста со 100% покрытием:

 PASS  stackoverflow/61082732/index.test.js (8.797s)
  61082732
    ✓ should unlink file (14ms)
    ✓ should throw an error (1ms)

  console.log node_modules/jest-environment-enzyme/node_modules/jest-mock/build/index.js:866
    file was deleted.

----------|---------|----------|---------|---------|-------------------
File      | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s 
----------|---------|----------|---------|---------|-------------------
All files |     100 |      100 |     100 |     100 |                   
 index.js |     100 |      100 |     100 |     100 |                   
----------|---------|----------|---------|---------|-------------------
Test Suites: 1 passed, 1 total
Tests:       2 passed, 2 total
Snapshots:   0 total
Time:        10.169s

исходный код: https://github.com/mrdulin/react-apollo-graphql-starter-kit/tree/master/stackoverflow/61082732

...