0

私はレールに比較的慣れていないため、この rspec テストが失敗する理由がわかりません。

モデルクラス

class Invitation < ActiveRecord::Base
  belongs_to :sender, :class_name => "User"

  before_create :generate_token

  private 
  def generate_token
    self.token = Digest::SHA1.hexdigest([Time.now, rand].join)
  end
end

テスト

  it "should create a hash for the token" do
    invitation = Invitation.new
    Digest::SHA1.stub(:hexdigest).and_return("some random hash")
    invitation.token.should == "some random hash"
  end

エラー:

Failure/Error: invitation.token.should == "some random hash"
       expected: "some random hash"
            got: nil (using ==)

招待モデルには token:string 属性があります。何か案は?ありがとう!

4

1 に答える 1

3

before_createsave新しいオブジェクトに対して前に実行されます。新しい招待Invitation.newオブジェクトをインスタンス化するだけです。new を呼び出した後に保存するか、最初に招待オブジェクトを作成する必要があります。

Digest::SHA1.stub(:hexdigest).and_return("some random hash")
invitation = Invitation.new
invitation.save
invitation.token.should == "some random hash"

また

Digest::SHA1.stub(:hexdigest).and_return("some random hash")
invitation = Invitation.create
invitation.token.should == "some random hash"
于 2012-04-23T20:48:34.120 に答える