我是使用 React-Jest-Enzyme 进行测试的新手,但从我收集的所有相关信息来看,在我看来,大多数测试实际上都在测试如果 React 库崩溃,而不是我的实际业务逻辑。
我举几个例子,如果我错了请指正:
这个策略有什么问题?
据我所知,它的主要目的是捕获对我的代码的任何不需要的更改。它“stringify”我的组件树,并注意到是否添加了任何新的换行符/字符,对吗?
所以它主要用于那些我可能不小心按下键盘的情况?或者其他人不小心弄乱了我的代码?
我看到的大多数解释你如何使用它们的例子都是这样的:
const wrapper = mount(<MyComponeny />)
expect(wrapper.find(‘button’).simulate(‘click)).toHaveBeenCalledTime(1)
我能从中获得什么值(value)?
如果我用 enzyme 的 simulate(‘click’) 模拟按钮点击,那么我应该期望它会触发点击事件。
我到底在测试什么? enzyme 的功能?
enzyme 也为我们提供了 setState 方法。
如果 wrapper.setState({value: ‘some value’)} 假设要更改我的状态,为什么我会看到这样的用例:
wrapper.setState({value: ‘new value’)}
expect(wrapper.state(‘value’)).toBe(‘new value’)
?
为什么我需要测试测试框架/额外的库?
一切都显得有些暧昧
最佳答案
快照测试:
so its mostly being used for those cases I could accidently pressed my keyboard? or someone else accidently mess with my code?
如果您调整了一个通用组件/服务/实用程序,但没有注意到它会影响某些意想不到的组件。
现在它可以以良好的方式影响它,例如修复组件中的意外文本 - 但快照使您能够快速查看所有受影响组件的更改。
const wrapper = mount(<MyComponeny />) expect(wrapper.find(‘button’).simulate(‘click)).toHaveBeenCalledTime(1)What value do I get out of it?
这只是一个简单的例子。这确实是一个非常糟糕的测试——它不测试任何东西。通常你会测试更重要的东西,比如:
toHaveBeenCalledTime(1) 在某种过程中 - 例如,确保网络请求在整个点击和其他触发器流程中仅完成一次。
why do I see use cases like this:
wrapper.setState({value: ‘new value’)} expect(wrapper.state(‘value’)).toBe(‘new value’)?
这也是一个简单的例子,向您展示了您可以在 React 组件上设置状态。它实际上并没有测试任何东西。
您可以做的是在组件上设置状态并确保它呈现正确数量的子项或呈现您期望的其他一些东西。
这也与快照有关-
在组件上设置特定状态并制作快照,然后,当您处理该组件使用的服务和实用程序时,您可以确保它不会因该特定状态而中断。
关于javascript - 我觉得大多数用 jest 和 enzyme 进行的组件测试都是毫无值(value)的,我错了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48903587/
在我的系统中,我已经定义了STI。Dog继承自Animal,在animals表中有一个type列,其值为"Dog"。现在我想让SpecialDog继承自dog,只是为了在某些特殊情况下稍微修改一下行为。数据还是一样。我需要通过SpecialDog运行的所有查询,以返回数据库中类型为Dog的值。我的问题是因为我有一个type列,rails将WHERE"animals"."type"IN('SpecialDog')附加到我的查询中,所以我不能获取原始的Dog条目。所以我想要的是以某种方式覆盖rails在通过SpecialDog访问数据库时使用的值,使其表现得像Dog。有没有办法覆盖用于类型
require"socket"server="irc.rizon.net"port="6667"nick="RubyIRCBot"channel="#0x40"s=TCPSocket.open(server,port)s.print("USERTesting",0)s.print("NICK#{nick}",0)s.print("JOIN#{channel}",0)这个IRC机器人没有连接到IRC服务器,我做错了什么? 最佳答案 失败并显示此消息::irc.shakeababy.net461*USER:Notenoughparame
我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的
我的rails3.1.6应用程序中有一个自定义访问器方法,它为一个属性分配一个值,即使该值不存在。my_attr属性是一个序列化的哈希,除非为空白,否则应与给定值合并指定了值,在这种情况下,它将当前值设置为空值。(添加了检查以确保值是它们应该的值,但为简洁起见被删除,因为它们不是我的问题的一部分。)我的setter定义为:defmy_attr=(new_val)cur_val=read_attribute(:my_attr)#storecurrentvalue#makesureweareworkingwithahash,andresetvalueifablankvalueisgiven
有什么方法可以为url/path助手提供默认值吗?我有一个可选范围环绕我的所有路线:#config/routes.rbFoo::Application.routes.drawdoscope"(:current_brand)",:constraints=>{:current_brand=>/(foo)|(bar)/}do#...allotherroutesgohereendend我希望用户能够使用这些URL访问网站:/foo/some-place/bar/some-place/some-place为了方便起见,我在我的ApplicationController中设置了一个@current
我有这个:AccountSummary我想单击该链接,但在使用link_to时出现错误。我试过:bot.click(page.link_with(:href=>/menu_home/))bot.click(page.link_with(:class=>'top_level_active'))bot.click(page.link_with(:href=>/AccountSummary/))我得到的错误是:NoMethodError:nil:NilClass的未定义方法“[]” 最佳答案 那是一个javascript链接。Mechan
我想念Ruby中的Hash方法来仅转换/映射散列值。h={1=>[9,2,3,4],2=>[6],3=>[5,7,1]}h.map_values{|v|v.size}#=>{1=>4,2=>1,3=>3}你如何在Ruby中归档它?更新:我正在寻找map_values()的实现。#moreexamplesh.map_values{|v|v.reduce(0,:+)}#=>{1=>18,2=>6,3=>13}h.map_values(&:min)#=>{1=>2,2=>6,3=>1} 最佳答案 Ruby2.4引入了方法Hash#tran
我看到有关未找到文件min.map的错误消息:GETjQuery'sjquery-1.10.2.min.mapistriggeringa404(NotFound)截图这是从哪里来的? 最佳答案 如果ChromeDevTools报告.map文件的404(可能是jquery-1.10.2.min.map、jquery.min.map或jquery-2.0.3.min.map,但任何事情都可能发生)首先要知道的是,这仅在使用DevTools时才会请求。您的用户不会遇到此404。现在您可以修复此问题或禁用sourcemap功能。修复:获取文
编辑:经过进一步测试,问题似乎是站点特定的,理论上应该可以正常工作。本应位于多行的Textarea值正在一行中全部提交。textarea_values="value1\nvalue2"form=page.form_with(:id=>'form_id_here')form['my_textarea']=textarea_valuessubmit=form.button_with(:value=>'Submit')form.click_button(submit)提交的值是value1\nvalue2而不是预期的多行。有没有我可以尝试的另一种添加表单值的方法?
我有一个用Rails3编写的站点。我的帖子模型有一个名为“内容”的文本列。在帖子面板中,html表单使用tinymce将“content”列设置为textarea字段。在首页,因为使用了tinymce,post.html.erb的代码需要用这样的原始方法来实现。.好的,现在如果我关闭浏览器javascript,这个文本区域可以在没有tinymce的情况下输入,也许用户会输入任何xss,比如alert('xss');.我的前台会显示那个警告框。我尝试sanitize(@post.content)在posts_controller中,但sanitize方法将相互过滤tinymce样式。例如