到目前为止,我已经构建了一个简单的 Rails 应用程序,其中包含三个继承自 ActiveRecord 的类。我在测试驱动开发方面领先了一点,因为我已经编写了需要测试的类。到目前为止,我编写的测试都进行得很顺利。对象正在创建,属性正在响应,验证都已到位。
当我调用“!”时问题就开始了在我的创建方法上,因为现在对象一直被传递到数据库。而不是我的正常验证拦截无效输入,数据库似乎有机会响应刺激。
到目前为止,我在运行测试时收到的错误是:
ActiveRecord::记录无效: 验证失败:店铺太长(最多11个字符)
我很高兴收到此错误,但想知道如何在我的测试中更好地规划它。产生上述错误的代码是:
it "should not a accept a department with a shopify shop_id that's over 11 chars" do
long_id = "9" * 12
long_id_department = Department.create!(@attr.merge(:id => [long_id, ""]))
long_id_department.should_not be_valid
end
我认为这一行尤其应该采用其他形式:long_id_department.should_not be_valid
希望大家能阐明该表格应该是什么。
最佳答案
shoulda gem 使您的验证测试变得轻而易举。较新的 shoulda 版本是作为 RSpec 的附加组件构建的。
您尝试的特定验证类型的文档是 here.
您最终会得到如下所示的测试代码。
describe Department do
it { should ensure_length_of(:id).is_at_most(11) }
end
关于ruby-on-rails - 用于 Rails 的 RSpec 和 ActiveRecord : How to write effective tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7314522/