2012-03-15 178 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的這個錯誤,但沒有找到解決的辦法。 請幫助我。謝謝:)RSpec:未定義的方法`assert_difference'for ...(NoMethodError)

+0

它看起來像你使用使用RSpec的一個assert_difference寶石,是否正確?我想你需要把它包裝在一個'it'塊中。 – 2012-03-15 03:53:13

+0

我試圖把它放在塊中,但仍然有這個錯誤 – 2012-03-15 06:54:59

回答

4

請務必包括AssertDifference在投機/ spec_helper.rb:

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:在 ':未初始化的常量AssertDifference(NameError) – 2012-03-16 02:28:12

+1

您是否已將'gem'assert_difference''添加到您的Gemfile中? – 2012-03-16 11:08:01

+1

你說得對,我忘了:D – 2012-03-18 01:44:38

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,肯定應該是「改變」的方法。這裏有兩個例子消極和積極的一個,這樣你可以有語法感:

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 
相關問題