2017-02-22 38 views
1

Я тестирование компонент, который визуализирует компонент ребенка, который имеет следующие contextTypes:Jest - тестирование компонент, который использует реакцию между маршрутизаторами

Component.contextTypes = {router: PropTypes.object.isRequired} 

Я совершенно новый шутить, но исходя из мокко/фермента I Я никогда не сталкивался с этой проблемой.

Мой первый тест выглядит так, и я на самом деле просто возиться с ним, чтобы посмотреть, как это работает:

it('should exist',() => { 
    wrapper = renderer.create(<Companies/>); 
    let tree = wrapper.toJSON(); 
    expect(tree).toMatchScreenshot(); 
}); 

Когда я запускаю тест я получаю следующее сообщение об ошибке:

Failed context type: The context `router` is marked as required in `ChildComponent`, but its value is `undefined`. 

Есть ли работа для этого, или что-то в документах, которые мне не хватает? Заранее спасибо!

РЕШЕНИЕ: Для всех, кто работает в том же номере, я использовал следующие в beforeEach():

MyComponent.contextTypes = { 
     router: function() { 
      return { 
       transitionTo: jest.genMockFunction() 
      }; 
     } 
    }; 
+0

Какая версия реактивного маршрутизатора используется? – paqash

+0

@paqash версия 2.4.1 – Jake

ответ

2

У меня была аналогичная проблема, когда я использую <Link> в какой-то компонент, и столкнулся с той же ошибки как указано выше. В моем случае я использовал реактивный маршрутизатор 4.1.1, и решение выше не работало.

Я добавил объект и функции в контекст, но я надеюсь, что кто-то даст мне лучшее решение для этого.

describe('SomeComponent',()=>{ 

    it('renders component',()=>{ 
    const wrapper = mount(
     <SomeComponent />, 
     { 
     context: { 
      router: { 
      history: { 
       push:()=>{}, 
       replace:()=>{}, 
       createHref:()=>{}, 
      } 
      } 
     }, 
     childContextTypes: { 
      router: PropTypes.object.isRequired, 
     } 
     } 
    ) 
    expect(wrapper.text()).toContain('some component text') 
    }) 

}) 

Я использую фермент для mount.

 Смежные вопросы

  • Нет связанных вопросов^_^