我的Rails测试有问题。 我有一个模型新闻和一个模型标签,它有一个HABTM关系 新闻模式:
class News < ActiveRecord::Base
has_and_belongs_to_many :tags
validates :name, presence: true, length: { minimum: 4 }
validate :has_tags?
private
# Validates presence of tags
def has_tags?
errors.add(:tags, ": News must have some tags.") if self.tags.blank?
end
测试模型:
class Tag < ActiveRecord::Base
has_and_belongs_to_many :news
validates :name, presence: true
我为has_tags验证编写了一个测试:
test "should be valid" do
assert @news.valid?
end
test "news should have tags" do
assert_not @news.tags.blank?
end
My News Fixtures:
news1:
name: Newstest
tags:
标签灯具:
one:
name: Music
two:
name: Movie
当我运行rake test:models时,两个测试都失败了,这是对的。 当我向新闻夹具添加标签并再次运行测试时,测试通过。
news1:
name: Newstest
tags: one
但是当我移除灯具中的Tag并再次运行rake test:models时,测试再次通过。 为什么在删除“one”标签后测试是真的。
要解决此问题,我必须始终在控制台中运行rake db:test:prepare
。
我不知道我做错了什么。
答案 0 :(得分:1)
运行Rails测试时,测试夹具数据将加载到测试数据库中。除非您明确清除它(例如,使用rake db:test:prepare
),否则不会将其清除。您可以使用SqliteBrowser之类的工具下载测试数据库并检查数据来验证这一点。
因此,即使您在测试运行之间更改测试装置,如果您没有清除测试数据库,您之前的测试数据仍将存在。