使用摩卡的助手助手

时间:2011-05-20 19:02:07

标签: ruby-on-rails rspec mocha stubbing

it "should have edit button if user has permission to edit" do
  EntitiesHelper.stubs(:permission_to_edit_entity?).returns(true)
  get :index
  @entities[0..3].each do |entity|
    response.should have_selector("form",
      :method => "get",
      :action => "/entities/edit/#{entity[:id]}") do |form|
        form.should have_selector("input", :value => "Edit")
    end
  end
end

我正在尝试编写一个简单的测试用例,测试用户是否具有编辑权限时会显示编辑按钮。我正在尝试使用存根。但是,它似乎不起作用。输出视图不显示每个实体旁边的编辑按钮,如果存根工作,我会期望。我是摩卡和捣蛋的新手 - 我在这里做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为EntitiesHelper是一个普通的rails帮助程序,它被混合到控制器中 - 因此所有它的实例方法(例如permission_to_edit_entity?)都可供控制器使用,并且视图可以访问这些帮助程序方法(通过控制器)...所以您可以在控制器上存根方法:

controller.stubs(:permission_to_edit_entity?).returns(true)

在这种特殊情况下,我甚至会考虑将存根更改为模拟,因为您希望调用该方法(尽管您正在测试按钮存在,但最好知道流程没有按预期发生):

controller.expects(:permission_to_edit_entity?).returns(true)

但这当然是有争议的,无论如何你应该没事......