我的课程控制器的控制器测试出了问题。似乎设计没有正确登录我的用户。此控制器的所有生成的控制器测试仅失败。
我使用Factory-girl在users.rb中创建我的用户,如下所示......
FactoryGirl.define do
factory :user do
sequence :email do |n|
"test#{n}@email.com"
end
password "password"
password_confirmation "password"
end
end
然后在我的courses_controller_spec.rb中,我按照以下方式模拟登录。
require 'spec_helper'
describe CoursesController do
include Devise::TestHelpers
before(:each) do
#@request.env["devise.mapping"] = Devise.mappings[:user]
user = Factory.create(:user)
user.toggle!(:admin)
sign_in user
end
describe "DELETE destroy" do
it "redirects to the courses list" do
course = Factory.create(:course)
delete :destroy, {:id => course.to_param}, valid_session
response.should redirect_to(courses_url)
end
end
我得到了输出......
Failure/Error: response.should redirect_to(courses_url)
Expected response to be a redirect to <http://test.host/courses> but was a redirect to <http://test.host/users/sign_in>
请注意我在spec_helper.rb中也使用了以下内容
config.include Devise::TestHelpers, :type => :controller
尝试了
在我的请求规范中,我可以创建用户并使用下面的登录工作正常,但我想让所有控制器测试工作也
fill_in "Email", :with => user.email
fill_in "Password", :with => user.password
click_button "Sign in"
非常感谢任何帮助。
答案 0 :(得分:6)
我自己就是这么想的。从删除调用中删除valid_session。这似乎覆盖了使用设计测试助手定义的会话。
其他一切似乎都是正确的。保留所有设计设置代码,只需将规范中的删除行更改为:
delete :destroy, {:id => course.to_param}
我还在before( :each )
块中的以下行中保留了您已注释掉的内容。不知道它到底做了什么:
@request.env["devise.mapping"] = Devise.mappings[:user]