rspec期望条件或条件

时间:2013-08-13 11:14:16

标签: ruby-on-rails rspec

我如何防御性地编写rspec测试,以便在一个场景中必须满足至少一个期望但是其他人的失败被接受? (没有输入改变)。 listing multiple expectations很容易AND,但OR如何表达?

例如,用户有很多帖子,用户 Bob 攻击表单,这样当他提交创建帖子表单时,它会发送用户 Dunc 的id。目前,应用程序忽略传递的 Dunc ID,并使用 Bob 的id作为 Bob 正在创建帖子。所以我们可以测试新创建的Post有 Bob 的user_id。但是,如果将来重构代码以便它返回错误消息而不是假设 Bob 的id,则该测试将错误地失败。我想测试意图,而不是实现。

所以我需要测试没有创建帖子,如果创建了一个帖子,那么 Bob

这个例子很简单,可以通过测试来解决

expect { run }.not_to change( Post.where(user_id: @other_user.id), :count )

然而,我正在寻找通用解决方案,在更复杂的情况下,可能存在许多条件。如何在Rspec中实现“OR”? (或者不可能?)

1 个答案:

答案 0 :(得分:4)

我认为不可能。

当你说你要测试实现时,我认为你错了,而不是你的例子中的意图。

当你编写测试时,你会测试出来的是否与你的期望相符。

创建用户与返回错误消息完全不同。

在我看来,这样说很奇怪:当我这样做时,我会期待这个,或那个,或那个或那个发生。

在我看来,您应该编写一个测试,测试用户是否在发送正确的参数时创建,另一个测试用于处理用户尝试发送非法参数时发生的情况。