Meteor 如何在测试React组件时传递FlowRouter上下文

Meteor 如何在测试React组件时传递FlowRouter上下文,meteor,reactjs,flow-router,enzyme,mantrajs,Meteor,Reactjs,Flow Router,Enzyme,Mantrajs,我正在测试一个有5个链接的react组件。根据当前路由,每条链路都将变为活动状态。我使用Meteor和咒语以及酶来测试这些成分 页脚组件: import React from 'react'; class Footer extends React.Component{ render(){ let route = FlowRouter.current().route.name; return( <a className={rout

我正在测试一个有5个链接的react组件。根据当前路由,每条链路都将变为活动状态。我使用Meteor和咒语以及酶来测试这些成分

页脚组件:

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)
       )
    }

}
从“React”导入React;
类页脚扩展了React.Component{
render(){
让route=FlowRouter.current().route.name;
返回(
…(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);
    })
})
从“酶”描述{shall};
从“../core/components/Footer”导入页脚;
描述('页脚',()=>{
它('应该有5个链接',()=>{
const fooWrapper=shallow();
expect(fooWrapper.find('a')).to.have.length(5);
})
})

但是当我运行
npm测试时
,它说没有定义
FlowRouter。
在测试中如何将FlowRouter上下文传递给react组件?提前感谢

首先,为了遵守Mantra规范,您应该像这样重写页脚组件:

从“React”导入React;
常量页脚=({route})=>(
要封装它。要测试容器,您可以像这样模拟FlowRouter:

it('应该做点什么',()=>{
const FlowRouter={current:()=>({route:{name:'foo'}}});
const container=footerContainer({FlowRouter},otherArguments);
...
})

由于Mantra使用NPM直接提供的
mocha
包而不是
practicalmeteor:mocha
或类似的Meteor包来运行测试,所以(据我所知)您不能在您的测试中加载Meteor软件包,如
kadira:flow router

谢谢您的回答。但是,我遇到了一个错误。它说
找不到模块Meteor/kadira:flow router
@Waiski@Cyval你运行过meteor add kadira:flow router吗?是的,我运行过。但是当我使用导入时,它似乎不起作用e>@Waiski@Cyval抱歉,我没有意识到Mantra运行的测试与我以前的不同,因此您不能在测试中使用Meteor软件包。我现在相应地编辑了答案。