- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对智能/dumb组件等非常熟悉。现在我正在做类似的事情
LoginContainer,通过mapStateToProps和mapDispatchToProps使用react-redux与redux连接。
然后我有一个包含 UI 和其他内容的 LoginComponent。
所以问题是,当用户单击“LoginComponent”中的登录按钮时,它必须调用那里的函数。所以我猜的方法是从 LoginContainer 传递函数,然后在 LoginComponent 中单击按钮时调用它?
但是这样,这是否意味着在进行单元测试时,我必须在dumb组件 LoginComponent 中模拟此按钮函数调用的功能?
最佳答案
我认为你是完全正确的。 LoginContainer
组件需要提供您希望在用户单击登录按钮时执行的函数。看我的例子:
登录容器
import { connect } from 'react-redux'
import Login from '../components/login'
import { initiateLoginRequest } from '../actions/login'
const LoginContainer = connect(null, { initiateLoginRequest })(Login)
export default LoginContainer
注意:我提供一个对象作为 connect()
的第二个参数,而不是函数。您可以在 redux 文档中阅读相关内容。
现在我的登录组件可以利用传入的函数来调度操作:
<Button
raised
primary
label="Login"
onClick={this.props.initiateLoginRequest()}
/>
此按钮将位于我的组件 render()
方法中的某个位置。
如果您想测试这样的演示组件,我建议您查看 Enzyme 。 Enzyme 是 React 的 JavaScript 测试实用程序,它允许您编写如下测试:
import expect from 'expect'
import React from 'react'
import { shallow } from 'enzyme'
import { Button } from 'react-toolbox/lib/button'
import Login from '../../src/components/login'
function setup() {
const props = {
initiateLoginRequest: expect.createSpy()
}
const wrapper = shallow(<Login {...props} />)
return {
props,
wrapper
}
}
describe('components', () => {
describe('Login', () => {
describe('Login Button', () => {
it('should dispatch the proper action ', () => {
const { wrapper, props } = setup()
expect(props.initiateLoginRequest.calls.length).toBe(0)
wrapper.find(Button).at(1).simulate('click')
expect(props.initiateLoginRequest.calls.length).toBe(1)
})
})
})
})
基本上,您创建一个 spy ,通过其 Prop 将其传递给组件,然后模拟单击事件。然后您可以在测试中检查该方法是否确实被调用。
关于javascript - redux dumb组件功能单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40205287/
我正在使用智能/转储组件构建我的 Redux (NgRx) 应用程序,但我正在努力决定这些dumb组件应该有多“哑”...... 例如,我有一个智能组件(posts),它有一个dumb组件(post-
有什么方法可以像Vim中的ctrl + p一样在Eclipse中获得“哑”字补全吗? 例如,我经常写一个函数调用: x = getMeAnXPlease(); 然后输入定义: function get
人们可能会认为将 3 个字符的缩写转换为数字表示形式是一项简单的任务。 JavaScript 说“不!”。 $(selector).each(function() { // convert m
如果您需要生成从 1 到 N 的素数,“愚蠢”的方法是遍历从 2 到 N 的所有数字,并检查这些数字是否可以被目前找到的任何素数整除,即小于相关数字的平方根。 在我看来,Eratosthenes 筛法
我创建了一个标准结构的“智能变体”——系统提供了struct canmsg,这种类型的数据是从can设备中读取的,我经常处理这样的帧。 现在,为了更容易处理它们,我创建了一个子类:class TCan
我希望在 golang 中实现远程客户端它通过 nc 连接到 Linux 并启动 bash。所以我需要告诉 bash 我可以从它发送给我的 stdout 中解析哪些功能,以及我将如何将键码和其他内容发
我有一个包含 300,000 个单词及其出现频率的列表的文本文件。每行的格式为 Word:FequencyOfOccurence。我希望可以从 C# 代码中访问此信息。我无法对列表进行硬编码,因为它太
我必须解决 gettext 识别 ES6 模板字符串的限制,并且我考虑将模板字符串的“非内插值”作为编译步骤,以便只有代码中的“正常”字符串。 基本上我想实现的是改变这个 const adjectiv
看看这个简单的示例,其中 prop toggleData 将是映射到容器 props 的 redux thunk 操作。 这是将这样的函数传递给子“哑”组件的推荐方法吗?我在网上读到一篇文章说,从性能
好吧,我不是在谈论业务逻辑决策,而是 UI 决策。 例如,我正在渲染一个表格,其中一列显示日期时间?需要格式化的属性。因为该值可以为空,所以我需要在格式化之前检查它是否不为空。 如果我想迂腐一些,我会
有谁知道在 Google App Engine 中返回包装的 Model 实例的巧妙方法,该实例仅公开一些原始属性,并且不允许将实例保存回数据存储区? 我不是在寻找实际执行这些规则的方法,显然仍然可以
我已经设法了解了 C++ 的一些功能(for_each、映射函数、使用迭代器...),但是用于接收通用容器和迭代器的模板和函数参数列表的构造仍然让我难以理解。我有一个实际的例子,希望有人能为我说明:
当然,我想不出有什么理由让我想要覆盖一元&运算符,但在https://stackoverflow.com/a/4542813/368896中张贴者指出,关于某些类 X: ...unless X doe
文章中Better web typography in a few simple steps , 它说 Talking about apostrophes, the correct sign for
我希望这个问题不要被标记为主要是基于意见的,而是有一个客观的答案。 我已阅读 Introducing dumb-init, an init system for Docker containers ,
愚蠢的引用是那些直接出现的引用。智能引号 curl 并且它们 curl 在正确的方向。我认为规则如下: 如果引用位于单词开头,则会向右 curl 。 如果引号位于单词开头,后面跟着另一个引号或分组符号
所以我正在研究一种“中级”级别的 react 项目。我了解基础知识,但不知道某些事情的最佳实践。 让我们假设我正在将一个函数传递给一个“哑”组件,在这个dumb组件中有一个按钮,它是对父函数 Edit
我正在尝试从工作本地服务器导出一个相当复杂的 mySQL 数据库,上传到在线服务器,以便协作者只读其中的数据。 数据库有多个外键,每个表都有一个主键。然而,由于不会将任何数据添加到这个愚蠢的“影子”副
struct A { A(int a); }; struct B { B(); void b(std::shared_ptr a); }; int main() { A
我问的原因是我们想使用 MySQL 当前不支持的特定 CHECK 约束。如果没有这种类型的约束,使用外键和参照完整性的全部原因似乎会随着应用程序代码承担更多数据库的责任而减少。 如果我们要创建一个“哑
我是一名优秀的程序员,十分优秀!