2016-11-29 5 views
2

В качестве примера я использовал Make React PropType warnings throw errors with enzyme.js + sinon.js + mocha.js.Тестирование реактивов PropTypes с sinon

У меня есть Реагировать компонент с одной необходимой опоры:

class Pagination extends Component { 
    render() { 
     return (
      ... render some stuff 
     ); 
    } 
} 

Pagination.propTypes = { 
    total: PropTypes.number.isRequired 
}; 

И это испытание для него:

describe('(Component) Pagination',() => { 
     before(() => { 
     sinon.stub(console, 'error', (warning) => { throw new Error(warning) }) 
     }) 
     after(() => { console.error.restore() }) 

     it('render fails without props',() => { 
      shallow(<Pagination />); 
     }); 

     it('render fails without props2',() => { 
     shallow(<Pagination />); 
     }); 
    }); 

После запуска, который проверяет первые один сбой, но второй - нет. Тесты аналогичны. Я думаю, что проблема в том, что React выдает предупреждающие сообщения только один раз. Как этого избежать?

Я хочу иметь 2 теста: один, который будет разбит, если реквизит не установлен, а второй отлично работает с реквизитом.

+0

так вы пробовали beforeEach() и afterEach() для очистки после каждого теста? Если это так, это сработало для вас? – PositiveGuy

ответ

1

Вы можете найти обходной путь here:

Pagination.displayName = Math.random().toString(); 

Вы были явно правы, что это из-за того же компонента, и если вы делаете это перед каждым испытанием, то фокусы его. Просто взломать, но он работает. По-видимому, нет лучшего способа.

P.S. Я сделал это в beforeEach, чтобы не писать его в каждом тесте самостоятельно. P.P.S. случайный не является самым надежным, так как вы можете получить одно и то же имя, и он будет терпеть неудачу, руководство или что-то еще можно использовать, если оно недостаточно, это просто пример.

+0

лично я думаю, что это гораздо более очевидно для других разработчиков, если вы бросаете такую ​​вещь в beforeEach. – PositiveGuy