我如何以防御的方式编写rspec测试,以便在一个场景中至少必须满足一个期望,而其他人的失败却被接受?(不改变输入)。AND通过listing multiple expectations很容易,但是OR是如何表达的呢?
例如,用户有许多帖子,用户Bob破解了一个表单,这样当他提交创建post表单时,它就会发送用户Dunc的id。当前,应用程序忽略传递的Dunc id,并在Bob创建post时使用Bob的id。因此,我们可以测试新创建的Post是否有鲍勃的user_id。但是,如果代码将来被重构,从而返回错误消息而不是假定Bob的id,那么测试就会错误地失败。我想测试的是意图,而不是实现。
因此,我需要测试,要么没有创建post,要么测试或,如果创建了一个post,它是为Bob创建的。
这个例子很简单,可以通过测试来解决。
expect { run }.not_to change( Post.where(user_id: @other_user.id), :count )然而,我正在寻找一般的解决方案,在更复杂的情况下,可能有很多条件。在Rspec中“或”是如何实现的?(或者说不可能?)
发布于 2013-08-13 11:40:42
我认为这是不可能的。
我确实认为,当您说您将测试实现,而不是您的示例中的意图时,您是错误的。
当你写一个测试,你测试出的结果是否符合你的期望。
创建用户与返回错误消息完全不同。
在我看来,很奇怪地说:当我这样做的时候,我期待着这个,那个,那个,或者那个发生。
在我看来,您应该编写一个测试,测试当您发送正确的参数时是否创建了一个用户,而另一个测试处理当一个用户试图发送非法参数时会发生什么。
https://stackoverflow.com/questions/18207605
复制相似问题