0

私はRspecを使用していくつかのテストを行う練習をしようとしていますが、奇妙な状況になっています。赤/緑/リファクタリングのサイクルに従うために無効なモデルを作成しようとすると、Rspecにエラーが表示されません。

リリースに前日がないことを確認したいと思います。

私のモデル

class Release < ActiveRecord::Base
  belongs_to :game
  belongs_to :platform
  attr_accessible :date

  validates :date, presence: true
end

私のスペックファイル

require 'spec_helper'

describe Release do
  before {@release = Release.new(date: Time.new(2001,2,3))}

  it{should respond_to :date}
  it{should respond_to :game}
  it{should respond_to :platform}

  describe "when date is not present" do
    before {@release.date = nil}
    it {should_not be_valid}
  end

  describe "when date is anterior" do
    before {@release.date = Time.now.prev_month}    
    it {should_not be_valid}
  end

end    

私の出力

.....

Finished in 0.04037 seconds
5 examples, 0 failures

何か案が ?

4

2 に答える 2

2

あなたが書くとき、あなたit { should_not be_valid }はレシーバーが@release(rspecがそれをどのように知るのでしょうか?)と思うように見えますが、デフォルトでは、暗黙のオブジェクトはdescribedであるクラスのインスタンスです:

https://www.relishapp.com/rspec/rspec-core/docs/subject/implicit-receiver

subject { some_object }明示的な件名またはに使用しit { @release.should_not be_valid }ます。

これについての詳細:

http://blog.davidchelimsky.net/2012/05/13/spec-smell-explicit-use-of-subject/

于 2012-12-06T22:28:01.277 に答える
1

試す:

it { @release.should_not be_valid}

代わりは。

于 2012-12-06T21:21:12.453 に答える