Rails布尔属性在测试中默认为true但不应该

时间:2015-11-21 22:38:04

标签: ruby-on-rails ruby ruby-on-rails-4 testing

On Rails 4。

刚刚使用approved?

为我的文章模型添加了default: false属性

当我去编写集成测试时,我注意到在测试环境中approved?默认为true。为了抵消这种行为,我手动将approved: false添加到fixtures(articles.yml)文件中,但我觉得我不应该这样做。

这是正确的行为吗?还是新的测试。

以下是我的迁移内容:

class AddApprovalToArticles < ActiveRecord::Migration
  def change
    add_column :articles, :approved, :boolean, default: false
    add_column :articles, :approved_at, :datetime
    add_column :articles, :approved_by, :string
  end
end

这是我的测试没有通过:

test "mod article should not be approved as default" do
  log_in_as(@mod)
  article = articles(:mod_article)
  assert_not article.approved?
  get edit_article_path(article)
  assert_template 'articles/edit'
end

和我的灯具:

mod_article:
  title: is it bad to be a mod
  content: no I don't think so
  created_at: <%= 10.days.ago %>
  updated_at: <%= 10.days.ago %>
  user: mod

如果我将approved: false添加到上面的灯具中,它将通过。

我最近完成了Michael Hartl的Rails教程,其中我们在用户模型中添加了admin?布尔值。在这种情况下,灯具知道将值默认为false。

感谢您的帮助,如果您需要我的任何其他特定代码,请与我们联系。

1 个答案:

答案 0 :(得分:0)

  

Fixtures是样本数据的一个奇特的词。夹具允许你   在测试之前使用预定义数据填充测试数据库   跑。夹具是用YAML编写的数据库独立的。   Quoted from Rails Guide

如果您使用灯具,则不会对您的数据库进行测试。因此,迁移中设置的默认值并不重要。