Рефакторинг состояния из заглушки в модульном тесте
У меня уродливый юнит-тест, который я не знаю, как лучше провести рефакторинг. У 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);
})
);
});
Как я могу реорганизовать это, чтобы быть чище, и получить состояние из моих тестов?