我正在使用 rspec 来测试我的控制器。问题是我需要一个登录助手方法,其他控制器测试将在其before(:each) do
方法中使用。
现在,我正在测试 ReportsController 只是获取 index 操作。
RSpec.describe ReportsController, type: :controller do
let(:user) {build :user, :storeadmin}
before(:each) do
@request.host = "localhost:3000"
login(user) if session[:id].blank?
end
# Index action has different types of responses
describe "#index" do
context "when content-type html" do
before do
get :index
end
it { expect(response.content_type).to eq "text/html"}
it { expect(response).to have_http_status(:ok) }
end
end
end
我的助手:
def login(user)
post login_submit_path, {admin:{login_id:user.login_id, password: user.password}}
end
当我执行测试时,它会发布到 ReportsController &#39> 登录而不是 LoginController ' 登录。它失败是因为:before_filter
检查用户是否使用会话登录。我还尝试在我的帮助方法中直接设置会话,例如request.session[:user] = user from db
和session[:user]=user from db
。