【发布时间】:2011-08-29 21:49:48
【问题描述】:
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
我正在尝试编写一个简单的测试用例,用于测试用户是否有权编辑时显示编辑按钮。我正在尝试为此使用存根。但是,它似乎不起作用。输出视图不会在每个实体旁边显示编辑按钮,如果存根工作,我会期望这些按钮。我是 mocha 和 stubbing 的新手 - 我在这里做错了什么?
谢谢!
【问题讨论】:
-
我假设您在视图规范中执行此操作?因为如果它是你试图测试的控制器规范,这将永远无法工作 - 在这些情况下,rspec 会模拟视图
-
即使我在顶部说“render_views”? (是的,我在控制器规范中这样做)
-
如果这不能解决问题,我如何在视图规范中实现相同的效果?
-
Nvm - 通过废弃存根并在 spec_helper 中实现一些辅助方法以编程方式赋予用户不同的权限,使其工作。唯一的缺点是它使测试不那么独立于权限逻辑。
-
permission_to_edit_entity 吗? EntityHelper 上的类方法?我的预感是它可能是一个实例方法,当模块混入时可以访问。如果是这种情况,您必须在混入对象上存根该方法,或者找出另一种方法。除非 any_instance 能解决问题(我怀疑它会),否则听起来很乱。
标签: ruby-on-rails rspec mocha.js stubbing