0

アプリ/モデル/ゾンビ.rb

class Zombie < ActiveRecord::Base
    attr_accessible :name
    validates :name, presence: true
end

仕様/モデル/ゾンビ_spec.rb

require 'spec_helper'

describe Zombie do

    it "is invalid without a name" do
        zombie = Zombie.new
        zombie.should_not be_valid
    end
end

エラー

ゾンビは名前なしでは無効です (FAILED - 1) 失敗:

 1) Zombie is invalid without a name
    Failure/Error: zombie.should_not be_valid
    ActiveRecord::StatementInvalid:
      Could not find table 'zombies'
    # ./spec/models/zombie_spec.rb:5:in `new'
    # ./spec/models/zombie_spec.rb:5:in `block (2 levels) in <top (required)>'

0.02912秒で完走 7例 失敗1回

失敗した例:

rspec ./spec/models/zombie_spec.rb:4 # 名前のないゾンビは無効

シード 12906 でランダム化

4

4 に答える 4

0

私もこのチュートリアルを進めていますが、同じ問題がありました。移行をすくいましたが、それでも望ましい結果が得られませんでした。arieljuodが述べたように、実行 $ rake db:test:loadすると問題が解決します。

于 2013-01-11T04:15:01.567 に答える
0

みんなありがとう、私は移行を実行していなかったので、 rake db:migrate を実行すると修正されました

于 2012-10-08T00:40:09.097 に答える
0

rake db:test:load を実行して、データベースのスキーマがテスト用データベースにロードされましたか?

また、テストが正しくありません。モデルが無効であることをテストしていますが、名前が存在しないため、モデルが無効であることをテストしていません。次のようなことを行う必要があります

it "is invalid without a name" do
    zombie = Zombie.new
    zombie.should_not be_valid
    zombie.errors[:name].should_not be_blank
end

そうすれば、 name 属性にエラーがあることが本当にわかります

于 2012-10-06T23:42:18.143 に答える
0

initializeActiveRecord クラスでメソッドを定義するべきではありません。

初期化メソッドを定義すると、次のエラーが発生します。

 Failure/Error: zombie = Zombie.new
 NoMethodError:
   undefined method `delete' for nil:NilClass

それがなければ、期待どおりに通過します。

したがって、モデルを次のように変更すると、仕様が合格になります。

class Zombie < ActiveRecord::Base
  attr_accessible :name
  validates :name, presence: true
end

または... しなければならない場合は、必ずsuper最初に電話してください

def initialize(options={})
  super
  self.name = options[:name]
end
于 2012-09-25T04:24:21.777 に答える