这在控制器测试中是否可行?

时间:2015-06-24 14:17:50

标签: ruby-on-rails ruby ruby-on-rails-4 testing integration-testing

在我的用户控制器中,我有一个用于新页面/方法的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

2 个答案:

答案 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