ちなみにRails3.1.1を使用しています。これを再現するには、新しいRailsプロジェクトを作成します。このプロジェクト内にExampleという名前で新しいモデルを作成します。次のようなこのモデルの移行を作成します...
class CreateExamples < ActiveRecord::Migration
def change
create_table :examples do |t|
t.integer :status, :null => false
t.timestamps
end
end
end
モデルコードの例を次のようにします...
class Example < ActiveRecord::Base
VALID_VALUES = [0, 1, 2, 3]
validates :status, :presence => true, :inclusion => {:in => VALID_VALUES}
end
次に、このモデルの単体テストを編集し、次のコードを追加します...
require 'test_helper'
class ExampleTest < ActiveSupport::TestCase
test "whats going on here" do
example = Example.new(:status => "string")
assert !example.save
end
end
レコードが作成されないようにフィクスチャファイルを編集してから、bundle exec rake test:unitsなどのコマンドを使用して単体テストを実行します。「文字列」は有効なステータスではないため、このテストに合格する必要があります。そのため、サンプルオブジェクトは保存の呼び出しからfalseを返す必要があります。これは起こっていません。VALID_VALUES配列から0を取得すると、これは機能します。なぜこれが当てはまるのか、誰か考えていますか?