Лично мне не нравится писать в нескольких пунктах отказа.Я думаю, что это затрудняет чтение тестаКроме того, я бы скорректировал структуру ваших тестов.
describe("Configuration class", ()=>{
describe("#getConfiguration", ()=>{
describe("When the config.env is correctly formed.", ()=>{
// do some setup and assertions
})
describe("when the config.env.json is malformed", () =>{
let actualError
let fakeFsStub
before(async ()=>{
fakeFsStub = sinon.stub(File, 'readFileAsyc');
fakeFsStub.withArgs('./src/configuration/config.json').returns(mockConfig);
fakeFsStub.withArgs('./src/configuration/config.test.json').returns(FakePromise.resolve(`{"key"}`));
try {
await Configuration.getConfiguration('test');
} catch (e) {
actualError = e;
}
})
it('should call fs.readFileAsyc with correct args', ()=>{
// make an assertion
})
it('should throw an exception', () => {
chai.assert.equal('SyntaxError: Unexpected token } in JSON at position 6', actualError + '');
});
})
})
})
Это именно тот способ, которым я предпочитаю писать модульные тесты, потому что он сохраняет мое единственное утверждение.Это делает его полезным, когда вы видите, что тест не пройден, и вы точно знаете, какое утверждение вызывает его сбой.Кроме того, когда ваша логика настройки выдает ошибку и приводит к сбою ваших тестов, вывод консоли скажет, что произошел сбой в блоке before.