2016-08-12 9 views
1

Я тестирую реактивный компонент, на котором есть 5 ссылок. Каждая ссылка активируется на основе текущего маршрута. Я использую Метеор с Мантрой и ферментом для тестирования этих компонентов.Как передать контекст FlowRouter при тестировании Реагирующие компоненты

Footer компонент:

import React from 'react'; 

class Footer extends React.Component{ 

    render(){ 
     let route = FlowRouter.current().route.name; 

     return(
      <a className={route == 'hub page' ? 'some-class active' : 'some-class'}> . . . (x5) 
     ) 
    } 

} 

Тестирование

describe {shallow} from 'enzyme'; 
import Footer from '../core/components/footer'; 

describe('footer',() => { 
    it('should have 5 links',() => { 
     const fooWrapper = shallow(<Footer/>); 
     expect(fooWrapper.find('a')).to.have.length(5); 
    }) 
}) 

Но когда я бегу npm test, он говорит, что FlowRouter is not defined. Как передать контекст FlowRouter к среагировать компонента в тестировании? Заранее спасибо

ответ

1

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

import React from 'react'; 

const Footer = ({ route }) => (
    <a className={ 
    route == 'hub page' ? 'some-class active' : 'some-class' 
    }> ... (x5) 
); 

export default footer; 

Теперь, чтобы проверить свой колонтитул, вы теперь не нужно FlowRouter вообще:

для того, чтобы футер реактивно пересборку как FlowRouter.current() изменения, вам нужно создать Mantra container, чтобы обернуть его в чтобы проверить контейнер, вы можете издеваться FlowRouter как это:.

it('should do something',() => { 
    const FlowRouter = { current:() => ({ route: { name: 'foo' } }) }; 

    const container = footerContainer({ FlowRouter }, otherArguments); 
    ... 
}) 

Поскольку Мантры использует mocha пакет непосредственно из НПХ вместо Метеора пакета practicalmeteor:mocha или сходного для выполнения тестов, вы не может (мои знания) нагрузка Метеор пакеты, такие как kadira:flow-router в ваших тестах.

+0

Благодарим вас за ответ. Однако я столкнулся с ошибкой. В нем говорится, что 'не может найти модуль meteor/kadira: flow-router' @Waiski – Cyval

+0

@Cyval Запустили ли вы 'meteor add kadira: flow-router'? – Waiski

+0

да, у меня есть. но он не работает, когда я использую 'import' @Waiski – Cyval