Рефакторинг состояния из заглушки в модульном тесте

У меня уродливый юнит-тест, который я не знаю, как лучше провести рефакторинг. У SUT есть несколько зависимостей, которые я хочу заглушить. Мне нужно отличное поведение от заглушки в каждом тесте из набора. Поэтому я устанавливаю переменные в той же области видимости, что и определение заглушки, и задаю эти переменные из каждого теста. Я использую Proxyquire, Sinon и Blue-Tape (лента с обещаниями). Я хотел бы написать это лучше, используя эти инструменты, если моя проблема не ограничена самим инструментом.

// embedImage.js:
import { readFileAsync } from 'fs-extra-promise';
...
export default embedImage;

// embedImage.test.js - Yuck!
let SHOULD_ERROR_READ;
let READ_FILE_CONTENTS;

const fsStub = {
  readFileAsync: sinon.spy(() => {
    return (new Promise((resolve, reject) => {
      SHOULD_ERROR_READ ? reject(new Error('readFileError')) : resolve(READ_FILE_CONTENTS);
    }));
  }),
  ...
}

const embedImage = proxyquire.noCallThru().load('./embedImage', {
  'fs-extra-promise': fsStub,
}).default;

И тогда мои тесты такие:

test('It throws an error on file read error', assert => {
  SHOULD_ERROR_READ = true;
  READ_FILE_CONTENTS = null;

  return (
    embedImage(null, null)
      .catch(value => {
        assert.isEqual(/readFileError/.test(value), true);
      })
  );
});

Как я могу реорганизовать это, чтобы быть чище, и получить состояние из моих тестов?

0 ответов

Другие вопросы по тегам