- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的 React 应用程序(无通量/redux)中,我正在尝试使用 enzyme
对组件进行单元测试,浅渲染 效果很好,我是能够检索它的状态等,但是 mount rendering 向我抛出 cannot read property 'route' of undefined
的错误。
我的 App.js
看起来像这样
class App extends Component {
render() {
return (
<BrowserRouter>
<Switch>
<MyCustomLayout>
<Route path="/mypath" component={myComponent} />
</MyCustomLayout>
</Switch>
</BrowserRouter>
)
}
这是 myComponent
import React, { Component } from 'react';
import './index.css';
import { getList } from './apiService.js';
class myComponent extends Component {
constructor(props) {
super(props);
this.state = {
myList: [],
};
}
componentDidMount() {
// get list ajax call
getList().then(response => {
this.setState({
myList: response.data
})
});
}
handleClick = () => {
this.props.history.push('/home');
}
renderMyList() {
/*
Code for rendering list of items from myList state
*/
}
render() {
return (
<div>
<h1>Hello World</h1>
<button onClick={this.handleClick}>Click me</button>
{this.renderMyList()}
</div>
)
}
}
export default myComponent
这是我的测试代码
import React from 'react';
import myComponent from './myComponent';
import renderer from 'react-test-renderer';
import { shallow, mount } from 'enzyme';
import sinon from 'sinon';
test('Initial state of myList should be empty array ', () => {
const component = shallow(<myComponent/>);
expect(component.state().myList).toEqual([]);
});
test('Make sure the componentDidMount being called after mount', () => {
sinon.spy(myComponent.prototype, 'componentDidMount');
const component = mount(<myComponent/>);
expect(myComponent.prototype.componentDidMount.calledOnce).toEqual(true);
});
错误是什么?
最佳答案
前几天在这里遇到了这个问题 - 您收到此错误的原因是因为您尝试挂载 <Route />
或 <Link />
或用 withRouter()
包裹的组件当没有<Router />
围绕代码。这些组件需要特定的上下文(<Router />
提供),因此为了测试这些组件,您必须将组件安装在 <MemoryRouter />
中。 .
这是为您执行此操作的函数:
const mountWithRouter = Component => mount(
<MemoryRouter>
{Component}
</MemoryRouter>
);
这是你如何使用它的:
test('Make sure the componentDidMount being called after mount', () => {
sinon.spy(myComponent.prototype, 'componentDidMount');
const component = mountWithRouter(<myComponent/>);
expect(myComponent.prototype.componentDidMount.calledOnce).toEqual(true);
});
话虽如此,在迁移到 react-router@^4.0.0
时,我最终尝试删除大部分已安装的测试代码。 - 这很麻烦。这样做的主要缺点是您的 const component
在此测试中不再是 myComponent
, 但是一个 MemoryRouter
.这意味着您不能那么容易地深入了解它的状态等。
编辑:
当我确实需要检查我“必须”安装的组件的状态时,我所做的一个示例是,我改为浅渲染它,然后手动运行我需要的生命周期方法,如下所示:
test('populates state on componentDidMount', () => {
const wrapper = shallow(<MyComponent />);
wrapper.instance().componentDidMount();
expect(wrapper.state()).toBe({ some: 'state' });
});
这样,我根本不需要处理路由器问题(因为没有挂载),我仍然可以测试我需要测试的内容。
关于unit-testing - 用 enzyme react 测试,无法读取未定义的属性 'route',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010814/
我有以下功能: fun process(t: T, call: (U) -> Unit, map: (T) -> U) = call(map(t)) fun processEmpty(t: T,
关闭。这个问题需要更多focused .它目前不接受答案。 想改善这个问题吗?更新问题,使其仅关注一个问题 editing this post . 4年前关闭。 Improve this questi
我正在实现 SVG Tiny 1.1,但我无法理解“用户单元”的概念。 SVG 1.1 规范将每个没有指定单位(例如“mm”、“cm”、“pt”等)的 定义为“用户单位”。 在实现接口(interfa
我正在学习本教程 - http://blog.dasberg.nl/getting-your-frontend-code-quality-in-order/ - 将前端质量指标推送到 SonarQub
我用了 rails new app --skip-test-unit 因为最初,我认为我可以稍后添加测试。 我开发了我的应用程序的很大一部分。 现在,我想添加 Test::Unit 但我找不到任何有关
您如何对由某些报表引擎(例如Crystal Reports或SQL Server Reporting Services)创建的报表进行“单元测试”? 最佳答案 报告的问题类似于GUI的问题。 如果报表
今天在 Proggit 上,我正在阅读题为“Why Unit Testing Is A Waste of Time”的提交的评论线程。 我并不真正关心文章的前提,而是关心 comment对此作出: T
“单元测试”属于白盒测试还是黑盒测试?还是与其他两种测试完全不同? 最佳答案 我觉得这个article by Kent Beck更多地引用 TDD 和单元测试很好地总结了这一点。基本上,这取决于您实际
这是代码: def filterAcc(p: Tweet => Boolean, acc: TweetSet): TweetSet = { foreach(tweet => if(p(el
我打算编写一个抽象类来测试我所有的 DTO 和 DOMAIN 对象。此类将采用可模板对象(通用类型)并使用反射来获取其中的属性类型,并将一些默认值分配给标识的原始类型,稍后将通过访问它们来断言这些类型
我有一个像这样的简单容器特征: trait Handler { def apply[In, Out](in: In): Out } 当我尝试实现它时: new Handler { def ap
为什么这样编译 scala> import scala.concurrent.Future import scala.concurrent.Future scala> val f: Unit = Fu
您使用什么样的实践来使您的代码对单元测试更加友好? 最佳答案 TDD——首先编写测试,强制你要考虑可测试性和帮助编写实际的代码需要的,而不是你认为可能的需要 接口(interface)重构——使得 m
我在elasticsearch中有文本字段,我想在kibana上可视化词云... 第一步,我们需要标记它们,我使用了“标准标记器” ... 使用这种形式的词云可视化结果如下图所示: 但是我需要的是专有
我有以下方法: override def insertAll(notifications: Seq[PushNotificationEncoded]) (i
我的应用程序服务层中有很多方法正在做这样的事情: public void Execute(PlaceOrderOnHoldCommand command) { var order = _rep
一直在使用 Sails.js,但在为 Controller 设计 Jasmine 单元测试时遇到了麻烦。如果这很明显,请原谅我的无知,因为在过去的 3-4 个月里我才深入研究 JavaScript 开
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
在ReKotlin repo README中,有如下代码: data class CounterActionIncrease(val unit: Unit = Unit): Action 代码Unit
我想对一个业务类进行测试,但我遇到了这个问题:其中一个模拟对象与其他类(例如 Sites、URL 和 ComplexObject)有许多依赖关系。 我的问题是:如果我必须在需要测试的方法中使用我的模拟
我是一名优秀的程序员,十分优秀!