【发布时间】:2011-11-03 12:35:49
【问题描述】:
我在 Rails 3.1 应用程序中有一个联系人表。我希望 last_name 接受 40 个字符,所以在我的模型中我写了:length => { :maximum => 40 }。但是,我的迁移中的一个错字创建了带有 :limit => 30 的 last_name 列。
我想知道为什么我的 Rspec 测试没有发现这一点:
it "should allow last_name up to max length" do
long_field = "a" * 40
Contact.new(@attr.merge(:last_name => long_field)).should be_valid
end
然后我意识到这只是检查模型。如果我改用.create!,测试就会失败:
it "should allow last_name up to max length" do
long_field = "a" * 40
Contact.create!(@attr.merge(:last_name => long_field)).should be_valid
end
所以问题是,我应该在测试我的模型时始终使用.create! 吗?还是太慢了?我还能如何确保我的模型和数据库定义不冲突?
这也让我想知道我是否应该在数据库中将字符串保留为 255,并且只检查模型中的长度。
【问题讨论】:
标签: ruby-on-rails unit-testing rspec