0

是否可以在 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
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")) }

这里的关键是您正在添加视图。在复数之前。

我想强调的是,在测试时,在看似视图测试的内部测试辅助方法并不是一个好主意。如果你真的想测试复数本身,最好在辅助规范中测试它。做类似的事情:

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

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

于 2013-01-14T16:56:41.813 回答