无法弄清楚如何测试使用私有ApplicationController方法的操作。解释:
用户拥有并属于许多组织(通过角色),反之亦然。组织有一堆相关的实体,但在应用程序中,用户一次只处理一个组织,因此对于我的所有控制器方法,我希望使用当前组织。所以在我的ApplicationController中:
private
# Returns the organisation that is being operated on in this session.
def current_org
# Get the org id from the session. If it doesn't exist, or that org is no longer operable by the current user,
# find an appropriate one and return that.
if (!session[:current_organisation_id] || !current_user.organisations.where(['organisations.id = ?', session[:current_organisation_id]]).first)
# If an org doesn't exist for this user, all hope is lost, just go to the home page
redirect_to '/' if (!current_user.organisations.first)
# Otherwise set the session with the new org
session[:current_organisation_id] = current_user.organisations.first.id;
end
# Return the current org!
current_user.organisations.first
end
首先,我不知道这是否是最好的范围。我喜欢一些优雅的default_scope,但是使用会话变量这似乎有问题。无论如何,上面让我在控制器中做到这一点:
class HousesController < ApplicationController
def index
@houses = current_org.houses
end
end
所以现在我想使用rspec来测试我的控制器。如何确保可以调用current_org方法并返回其中一个factory_girl组织模型,以便我可以编写规范。我对如何最好地将工厂,规格,动作和AppControlled方法结合起来感到困惑。