1
38
好的,这就是我的做法,我并不假装严格遵循最佳实践,但我专注于测试的准确性、代码的清晰性和套件的快速执行。
因此,让我们以
1- 我不使用FactoryGirl来定义要发布到控制器的属性,因为我想保持对这些属性的控制。FactoryGirl对创建记录很有用,但您始终应该手动设置测试操作中涉及的数据,这对可读性和一致性更好。 在这方面,我们将手动定义已发布的属性
2-
然后我为更新的记录定义了我期望的属性,它可以是发布属性的精确副本,但也可以是控制器做了一些额外的工作,我们也想测试一下。例如,一旦用户更新了他的个人信息,我们的控制器就会自动添加一个
这也是您可以为必须保持不变的属性添加断言的地方。字段示例
3-
我在一个
4- (从那时起,所有内容都在我的项目中的共享示例和自定义rspec匹配器中)是时候创建原始记录了,为此我们可以使用FactoryGirl
如您所见,我们手动设置
第二点需要注意:这里我们使用
5- 断言本身(最后是问题的答案)
总结 因此,添加以上所有内容,这就是规范的外观
当我们期望
最后,总结一下,当您编写了共享示例、助手和自定义匹配器时,您可以保持规范的超干燥。一旦您开始在控制器规范中重复相同的操作,就可以找到如何重构它。开始可能需要时间,但完成后,您可以在几分钟内为整个控制器编写测试 最后一句话(我停不下来,我喜欢Rspec)是我的全职助手的样子。事实上,它可以用于任何东西,而不仅仅是模型。
|
2
8
这是提问者的帖子。我必须深入了解这里的多个重叠问题,所以我只想报告一下我找到的解决方案。 太长,读不下去了试图确认PUT中的每个重要属性都没有改变,这太麻烦了。只需检查更改的属性是否符合预期。 我遇到的问题:
这是Hash方法,可以在rails_spec.rb中使用:
或者(也许更可取),我可以编写一个定制的rspec匹配器,它遍历每个属性并单独比较它们的值,这可以解决日期问题。这就是
然而,我决定回到更简单的方法来坚持
我希望这篇文章能让其他人避免重复我的调查。 |
3
3
嗯,我做了一件非常简单的事情,我使用的是Fabricator,但我很确定FactoryGirl也是如此:
另外,我不知道你们为什么要建一个新工厂,PUT动词应该是添加新的东西,对吧?。如果您首先添加了什么(
|
4
2
此代码可用于解决两个问题:
它通过使用JSON将值转换为字符串表示来解决比较浮点数的问题。 它还解决了检查新值是否已更新但其余属性未更改的问题。 然而,根据我的经验,随着复杂性的增加,通常要做的是检查一些特定的对象状态,而不是“期望我不更新的属性不会改变”。例如,想象一下,当在控制器中进行更新时,其他一些属性会发生变化,比如“剩余项目”、“一些状态属性”。。。您希望检查特定的预期更改,这可能不仅仅是更新的属性。 |
5
1
这是我测试PUT的方法。这是我的
而不是
不幸的是,关于你的问题,我只能说这些。 P.S.虽然如果您在数据库层上设置BigDecimal相等性检查,请使用以下样式编写
这可能对你有用。 |
6
1
使用rspec rails gem测试rails应用程序。 已创建用户的脚手架。 现在需要传递user_controller_spec.rb的所有示例 这已经由脚手架生成器编写。只需执行
现在将传递此文件中的许多示例。 对于invalid_attributes,请确保在字段和
在用户模型中。。first_name的验证为=>
现在,生成器创建的所有示例都将传递给这个controller_spec |
BrunoF · Rails&RSpec:使用预先存在的记录测试数据库 7 年前 |
Argus9 · FactoryGirl-忽略与特质的关联? 7 年前 |
Uzzar · 工厂女孩的困惑比比皆是 8 年前 |
Billy Logan · 在RSpec中获取未定义的方法错误 9 年前 |