2012-03-15 15 views
5
context 'with event_type is available create event' do 
    let(:event_type) { EventType.where(name: 'visit_site').first } 
    assert_difference 'Event.count' do 
    Event.fire_event(event_type, @sponge,{}) 
    end 
end 

私はこのエラーをGoogleで検索しましたが、それを修正するものは何も見つかりませんでした。 お願いします。あなたが仕様/ spec_helper.rbでAssertDifferenceが含まれていることを確認してください:)RSpec:未定義のメソッドassert_difference ...(NoMethodError)

+0

Rspecでassert_difference gemを使用しているようですね。私はそれを 'it'ブロックで囲む必要があると思います。 –

+0

私はそれをブロックしようとしましたが、まだこのエラーがあります –

答えて

4

ありがとう:

RSpec.configure do |config| 
    ... 
    config.include AssertDifference 
end 

そしてitブロックの内部でアサーションを置く:

it 'event count should change' do 
    assert_difference 'Event.count' do 
    ... 
    end 
end 
+1

"config.include AssertDifference"を追加するとエラーが発生します spec_helper.rb:43:ブロック(2レベル) ':初期化されていない定数AssertDifference(NameError) –

+1

Gemfileに 'gem' assert_difference''を追加しましたか? –

+1

あなた、私はそれを忘れました:D –

4

が、私はより良い書き換えをだろうとchangeを使用してください。

これはRSpec 3.xでは確実に機能しますが、おそらく古いバージョンでも同様です。

context 'with event_type is available create event' do 
    let(:event_type) { EventType.where(name: 'visit_site').first } 

    it "changes event counter" do 
    expect { Event.fire_event(event_type, @sponge,{}) }.to change { Event.count } 
    end 
end # with event_type is available create event 
5

RSPECを使用している場合、間違いなく「変更」が必要です。ここでは、2つの例として、負の意味と正の意味がありますので、構文の意味を理解できます。

RSpec.describe "UsersSignups", type: :request do 
    describe "signing up with invalid information" do 
    it "should not work and should go back to the signup form" do 
     get signup_path 
     expect do 
     post users_path, user: { 
      first_name:   "", 
      last_name:    "miki", 
      email:     "[email protected]", 
      password:    "buajaja", 
      password_confirmation: "juababa" 
     } 
     end.to_not change{ User.count } 
     expect(response).to render_template(:new) 
     expect(response.body).to include('errors') 
    end 
    end 

    describe "signing up with valid information" do 
    it "should work and should redirect to user's show view" do 
     get signup_path 
     expect do 
     post_via_redirect users_path, user: { 
      first_name:   "Julito", 
      last_name:    "Triculi", 
      email:     "[email protected]", 
      password:    "worldtriculi", 
      password_confirmation: "worldtriculi" 
     } 
     end.to change{ User.count }.from(0).to(1) 
     expect(response).to render_template(:show) 
     expect(flash[:success]).to_not be(nil) 
    end 
    end 
関連する問題