我要测试一个模型,就像这样;
class Post < ActiveRecord::Base
validates_presence_of :title
# ...
end
我找到了两种测试验证的主要方法:
1.使用thinkbot的应该是宝石https://github.com/thoughtbot/shoulda
describe Post do
it { should validate_presence_of(:title) }
end
2.直接测试验证,如书中的方式
describe Post do
it "must has title" do
post = Post.create
expect(post).not_to be_valid
end
所以我想知道哪种方式更好,为什么呢。提前谢谢。
答案 0 :(得分:1)
第一个测试验证Post
声明validates_presence_of :title
,第二个测试验证 Post
声明validates_presence_of :title
时的,并且实例具有没有标题,实例无效。
一方面,由于不需要测试validates_presence_of
的内部,更正确的测试应该是第一个。
另一方面,可以声称第一个测试依赖于实现细节(特定功能的使用),而第二个测试行为,因此 it < / em>更正确。
因此两个用例都有合理化。
我个人更喜欢第一个。
修改强>
我在shoulda
实现中挖了一下,它实际上是通过为实例设置nil
值并检查它是否有正确的错误来测试的,所以实际上它是 检查行为。在这种情况下,绝对应该使用它。