0

rspecでpluralize機能をテストすることは可能ですか?

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
4

2 に答える 2

5

私は RoR と 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.

于 2013-09-19T14:16:50.373 に答える
1

あなたの質問への答えは... 一種です。Rails は複数形を使用する機能を提供し、rspec-rails を使用していると仮定すると、必要に応じて Rails メソッドを呼び出すことができます。これがビュー テストの場合は、次のように入力できます。

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

ここで重要なのは、ビューを追加することです。複数形にする前に。

テストするとき、ビュー テストのように見える内部でヘルパー メソッドをテストするのは良い考えではないことを強調したいと思います。もし本当にpluralize自体をテストしたいのであれば、ヘルパー仕様でテストする方が良いでしょう。次のようなことをします:

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

このようにして、結果を保証し、他のテストで仮定を行い、適切な結果をテストできます。pluralize のようなヘルパーが変更された場合、この変更を警告する 2 つのテストがあるため、実際には必然的にテストが改善されます。その後、それに応じて調整できます。ちょっとした考え。

于 2013-01-14T16:56:41.813 に答える