2013-01-09 122 views
0

是否可以在rspec中測試複數函數?Rails rspec factorygirl複數測試

let(:schedule) { FactoryGirl.create(:schedule) } 

Failure/Error: it { should have_selector('h1', text: pluralize(Schedule.count.to_s, "schedule")) } 
NoMethodError: 
    undefined method `pluralize' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1:0xb607068c> 

答:(爲指出由以下埃裏克·C)

describe SchedulesHelper do 
    describe "pluralize schedule" do 
    if(Schedule.count > 0) 
     it { pluralize(1, "schedule").should == "1 schedule" } 
    else 
     it { pluralize(0, "schedule").should == "0 schedules" } 
    end  
    end 
end 
+0

您似乎沒有測試複數方法。您似乎在測試是否存在某個html,並且您正在使用pluralize方法來幫助您。你問是否可以用複數方法測試? –

+0

是的。是否有可能測試'pluralize'? – janejanejane

回答

1

回答你的問題是...那種。 Rails提供了使用複數和使用rspec-rails的功能,假設您正在使用這些功能,您可以根據需要調用rails方法。如果這是一個觀點的測試,這是有點什麼樣子,你可以輸入類似:

it { should have_selector('h1', text: view.pluralize(Schedule.count.to_s, "schedule")) } 

這裏的關鍵是,你要添加的視圖。複數之前的

我想強調的是,在測試時,在看起來是視圖測試的內部測試助手方法並不是一個好主意。如果你真的想自己測試複數形式,最好在助手規範中測試它。做這樣的事:

it { pluralize(1, "schedule").should == "1 schedule" } 
it { pluralize(0, "schedule").should == "0 schedules" } 

這樣,你可以放心的結果,並在其他測試做出假設,然後測試正確的結果。它實際上將不可避免地使測試更好,因爲如果像複數形式這樣的助手發生變化,那麼你有兩個測試可以警告這種變化。然後你可以相應地調整。只是一個想法。

+0

好的。謝謝埃裏克。我現在已經在我的幫手規範中進行了複數測試。 :) – janejanejane

5

我是新的回報率和RSpec,我有類似的錯誤是開始這個​​線程的隊友:

失敗:

1) Static Pages Home Page for signed-in users should show the total feeds 
Failure/Error: expect(page).to have_content(pluralize(user.feed.count, 'micropost')) 
NoMethodError: 
    undefined method `pluralize' for #<RSpec::Core::ExampleGroup::Nested_1::Nested_1::Nested_2:0x007fade8f35938> 
    # ./spec/requests/static_pages_spec.rb:39:in `block (4 levels) in <top (required)>' 

我試過view.pluralize沒有運氣。 ..我終於在我的集成測試中使用這個:

it "should show the total feeds" do 
    expect(page).to have_content("micropost".pluralize(user.feed.count))     
end 

和我的測試很好地工作。

希望這可以幫助別人。

iVieL。

+1

謝謝!這幫了我很多。 我建議你可以通過針對特定元素 'expect(page).to have_selector(「section span」,text:「micropost」.pluralize(user.feed.count))來改進它。 – claw68