【发布时间】:2013-08-02 03:58:14
【问题描述】:
这应该很简单,但我不知道为什么它不起作用。我在这里看到了许多更复杂的唯一性构造。我有应该是唯一索引的列。我在模型中指定了两次,只是测试选项,但我的唯一性测试仍然失败。
模型验证码:
validates :feed_url, presence:true,
format: {with: VALID_URL_REGEX},
uniqueness: true
validates_uniqueness_of :feed_url
RSpec 代码:
before do
@feed = FactoryGirl.create(:feed)
end
...
describe "when URL is already taken" do
before do
feed_with_same_url = @feed.dup
feed_with_same_url.feed_url = @feed.feed_url
feed_with_same_url.save
end
it { should_not be_valid }
end
保存应该无效,但测试失败,因为模型说它是有效的,即使字段相等。我自己在断点检查了字段,它们在大小写、长度、值等方面完全相同。
存在性和正则表达式有效性测试完美运行,因此模型正常工作。
我试图在模型中而不是在索引中执行此操作。我相信我昨晚读到 Rails 4 更喜欢(弃用?)代码而不是数据库中的这些测试,但我今晚找不到那个源。 (?) 无论哪种方式,我都希望看到模型正常工作。
【问题讨论】:
-
只是一个简短的说明,这可能对您解决这个特定问题没有帮助,但可以帮助您进行测试,看看 shoulda-matchers:github.com/thoughtbot/shoulda-matchers
-
看起来很有趣,谢谢你。正如你通过这个线程看到的那样,我现在对测试方法有点超载。但是,我会把这个放在我的包里以备后用。
标签: ruby-on-rails ruby model rspec ruby-on-rails-4