- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
例如,如果我在我的规范中使用 should validate_presence_of
,那只是测试我的模型中有 validate_presence_of
代码段,这就是测试实现。更重要的是,那个规范对于测试真正的问题是不是完全没有用,即“如果我不填写某个字段,模型会保存成功吗?”
最佳答案
一些 shoulda-matchers 的匹配器不测试实现,他们测试行为。 例如,查看 the source for allow_value
(validate_presence_of
使用的):#matches?
实际上将实例的属性设置为值并检查是否会导致错误。所有测试验证(它的 ActiveModel matchers )的 shoulda-matchers 匹配器都以同样的方式工作;他们实际上测试了模型拒绝错误值。
请注意,如果您相信 ActiveModel 和 ActiveRecord 会经过全面测试,则匹配器是测试行为还是仅测试是否使用了宏都无关紧要。
对模型的验证进行单元测试绝对有用。 假设您正在执行 BDD 并实现一个创建模型实例的简单表单。您将首先编写一个验收测试(一个 Cucumber 或 rspec 场景)来测试正确填写表单并成功创建实例的快乐路径。然后,您将编写带有表单错误的第二个验收测试,以证明当表单中出现错误时,不会保存任何实例,并且该表单将重新显示并带有相应的错误消息。
一旦你得到了可能在表单中出现的错误之一的错误路径场景,你会发现如果你为其他错误编写更多的错误路径场景,它们将非常重复——唯一的事情不同的是错误的字段值和错误消息。然后你会有很多全栈场景,需要很长时间才能运行。所以不要写比第一个错误路径场景更多的东西。相反,只需为将捕获每个错误的验证编写单元测试。现在,您的大多数测试都变得简单而快速。 (这是从验收测试下降到单元测试以处理细节的通用 BDD 技术的一个特定示例。)
但是,我不觉得 shoulda-matchers 的 ActiveRecord matchers 很有用。 考虑到测试关联的匹配器,我发现我的验收测试总是迫使我将所有关联添加到我需要的模型中,并且在单元测试中没有什么可做的。如果您是严格测试驱动的,则测试应用程序不可见的数据库功能的 ActiveRecord 匹配器(例如 have_db_index
)很有用,但我倾向于在那里懈怠。此外,就其值(value)而言,ActiveRecord 匹配器不测试行为(这将难以实现),仅使用相应的宏。
我确实发现 shoulda-matchers ActiveRecord 匹配器有用的一个异常(exception)是删除依赖对象。 我有时发现没有接受规范已经迫使我处理删除对象时关联对象发生的情况。实现这一点的 ActiveRecord 方法是将 :dependent
选项添加到 belongs_to
、 has_many
或 has_one
关联。编写一个使用 shoulda-matchers 的 belong_to
或 have_many
或 have_one
匹配器和 .dependent
选项的示例是我所知道的最方便的测试方法。
关于ruby-on-rails - shoulda-matchers 的 ActiveRecord 匹配器是否违反了 "test behavior not implementation"规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24075616/
出现以下错误: INSERT INTO GroupMembers VALUES ('Goldfrat', 'Simon Palm') * ERROR at line 1: ORA-02291: int
据称以下代码违反了 OO 指导原则。 public class Main { public static String NAME = "James"; public Main() {
我创建了一个名为 EvenementBean 的 EJB 2 进行测试。然后我就把它删除了。现在每当尝试部署我的 .ear 项目时,我都会收到以下错误: WARN [verifier] EJB
我正在开发的一个应用程序正在使用 Oracle 和 Hibernate 作为 ORM。当我尝试插入 PartyUserObject 时,我不断收到以下错误: could not insert: [Pe
我已经实现了一些代码行: if(condition){ Class a = new Class(); method(a.b(), a.c()); }else{ method(null, n
这个问题在这里已经有了答案: Static analysis of noexcept "violations" in C++ (2 个答案) 关闭 4 年前。 我大量使用 noexcept,不幸的是
我有一个 MVVM 应用程序,在我的几个 VM 中,我使用 CollectionViewSource.GetDefaultView(datasource) 来初始化我的 ICollectionView
当我尝试运行我的网站时,它显示 500 internal server error : Internal Server Error The server encountered an internal
运行生存分析,假设变量的 p 值具有统计显着性 - 假设与结果呈正相关。但是,根据 Schoenfeld 残差,违反了比例风险 (PH) 假设。 在纠正 PH 违规后,以下哪种情况可能发生? p 值可
我知道以下是一个主观问题,但您的指导方针确实有助于我追求干净、可测试的代码。 请考虑以下示例,我认为它违反了一系列设计原则。 public class OfferEligibilityCheckerS
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭10 年前。 Improv
当我尝试将 Paho MQTT javacrript 与 Mosquito MQTT websockets 一起使用时,只要我用来服务页面的 Web 服务器和 Mosquito 位于同一服务器(同一来
我在通过 hibernate 映射 oracle 时遇到问题 我有这些类(class) Stock.java package com.mc.stock; import java.uti
在我的项目中,我试图解决 Sonar 违规问题,我坚持使用这个,我有以下代码 不允许使用以下属性:语言 谁能告诉我如何解决这个 Sonar 违规问题?我可以简单地删除这种“语言”吗属性还是我应该输
我正在尝试记录唯一标识符,所以我无法承受重复记录我的 ID 当我尝试更新名为 Clients 的 SQL Server 表时,我收到类似这样的错误。 Violation of PRIMARY KEY
我正在尝试实现一个解决方案,以在给定的整数列表中找到第 k 个最大的元素,其中重复项具有 O(N*log(N)) Big-O 表示法的平均时间复杂度,其中 N 是列表中元素的数量。 根据我的理解,合并
如果 tuple_size 模板是一个完整的类型,结构化绑定(bind)特性表示它会像分解一样与元组一起使用。当 std::tuple_size 在程序的某一点是给定类型的完整类型而在另一点不完整时会
我们的应用目前已从 google play 中删除,因为它具有 SMS 权限。我们已经删除了权限并上传了一个新的 apk,但项目的状态仍然是删除。我们是否必须等待他们审核,或者是否需要任何其他必要的步
*i 和 u.i 如何在此代码中打印不同的数字,即使 i 被定义为 int *i = &u.i;?我只能假设我在这里触发了 UB,但我看不出具体情况。 ( 如果我选择“C”作为语言,ideone de
您好,我正在 Oracle SQL dev 中开发一个数据库,它试图从另一个表访问外键。我目前正在处理使用以下 CREATE 语句创建的 ItemOrdered 表 CREATE TABLE Item
我是一名优秀的程序员,十分优秀!