我如何防御性地编写 rspec 测试,以便在一个场景中至少必须满足一个期望,但接受其他人的失败?(不改变输入)。通过列出多个期望AND
很容易,但是如何表达呢?OR
例如,一个用户有很多帖子,用户Bob破解了一个表单,因此当他提交他的创建帖子表单时,它会发送用户Dunc的 id 。目前,应用程序忽略传递的Dunc id,并在Bob创建帖子时使用Bob的 id 。所以我们可以测试新创建的 Post 是否有Bob的 user_id。但是,如果将来对代码进行重构,使其返回错误消息而不是假设Bob的 id,那么该测试将错误地失败。我想测试意图,而不是实现。
所以我需要测试是否没有创建帖子,或者如果创建了一个帖子,它是为Bob的。
这个例子很简单,可以通过测试解决
expect { run }.not_to change( Post.where(user_id: @other_user.id), :count )
但是我正在寻找通用解决方案,在更复杂的情况下可能有很多条件。Rspec 中的“OR”是如何实现的?(或者不可能?)