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