在我的用户控制器中,我有一个用于新页面/方法的before_action。这个before_action包括:
@organization = Organization.friendly.find(params[:id])
在我的用户设备中,我有一个organization: one
用户@admin,在我的组织夹具中,我有一个该组织的记录“one”。仍然我的控制器测试在上面的行上失败,并显示消息:
ActiveRecord :: RecordNotFound:找不到没有ID的组织
这是为什么?是不是可以在控制器测试中执行此操作,我应该使用集成测试吗?如果我可以使用控制器测试(我在这里更喜欢),我的代码出了什么问题?
控制器测试:
test "should get new" do
log_in_as("user", @admin) # Test helper that functions properly
get :new # It fails here on the before_action defined in the users controller.
assert_response :success
end
答案 0 :(得分:2)
您希望params[:id]
,并且您没有通过它。尝试
test "should get new" do
log_in_as("user", @admin)
get :new, id: 1 # or any other
assert_response :success
end
您需要更改before_action
过滤器或更新测试。
答案 1 :(得分:0)
根据您显示的信息,我认为问题是您应该限制之前的操作。
例如
before_action :set_organization, except:[:index,:new]
或仅使用
before_action :set_organization, only:[:show,:edit,:update,:destroy]
。
如果您想为所有操作设置组织,那么您应该提供id参数。
例如:
before_action :set_organization
def set_organization
@organization = Organization.friendly.find(params[:organization_id])
end
get :new,organization_id: 1