测试方法始终断言

时间:2015-04-14 20:49:48

标签: ruby-on-rails

我的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。 我不知道我做错了什么。

1 个答案:

答案 0 :(得分:1)

运行Rails测试时,测试夹具数据将加载到测试数据库中。除非您明确清除它(例如,使用rake db:test:prepare),否则不会将其清除。您可以使用SqliteBrowser之类的工具下载测试数据库并检查数据来验证这一点。

因此,即使您在测试运行之间更改测试装置,如果您没有清除测试数据库,您之前的测试数据仍将存在。