reactjs – React Warning:失败的上下文类型:在`Component`中
我正在尝试测试一个React组件,它需要与app.js分开的react-router.
我有一个使用mixin Router.Navigation进行重定向的组件,如下所示: var React = require('react'),Router = require('react-router'); var Searchbar = React.createClass({ mixins : [Router.Navigation],searchTerm: function(e) { if (e.keyCode !== 13) { return; } this.context.router.transitionTo('/someRoute/search?term=' + e.currentTarget.value) },render: function() { return ( <div className="searchbar-container"> <input type="search" placeholder="Search..." onKeyDown={this.searchTerm} /> </div> ) } }); module.exports = Searchbar; 我试图为此写一个测试,但碰到了一堵墙.除了我无法测试转换以便按预期工作之外,我还在我的Jest测试中遇到了此错误消息: 警告:上下文类型失败:未在搜索栏中指定所需的上下文路由器. 有谁知道如何摆脱警告和奖金问题,我如何测试转换是否按预期工作? 我已经在这里和Github上的这个对话进行了研究:https://github.com/rackt/react-router/issues/400是我发现的最接近问题的.看起来我需要单独导出路由器,但这似乎是很多开销只是运行组件测试没有警告la https://github.com/rackt/react-router/blob/master/docs/guides/testing.md 这真的是要走的路吗?
在React Router的0.13版本中,不推荐使用mixins Navigation和State.相反,它们提供的方法存在于对象this.context.router上.这些方法不再被弃用,但如果你明确地使用this.context.router,则不需要mixin(但是你需要直接声明contextTypes);或者,您可以使用mixin,但不需要直接使用this.context.router. mixin方法将为您访问它.
在任何一种情况下,除非您通过React Router(通过Router#run)渲染组件,否则路由器对象不会提供给上下文,当然您也无法调用转换方法.这就是警告告诉你的 – 你的组件希望将路由器传递给它,但它无法找到它. 要单独测试它(不创建路由器对象或通过Router#run运行组件),您可以在组件的上下文中将模拟的路由器对象放在正确的位置,并测试您使用正确的值调用transitionTo. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |