Rails rspec factorygirl复数测试

时间:2013-01-09 13:34:54

标签: ruby-on-rails-3.2 rspec2 factory-bot

是否可以在rspec中测试复数函数?

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>

答案:(正如下面的Eric 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

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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" }

通过这种方式,您可以确保结果并在其他测试中做出假设,然后测试正确的结果。它实际上将不可避免地使测试更好,因为如果像复数这样的帮助器发生变化,那么你有两个测试可以警告这种变化。然后你可以相应调整。只是一个想法。