Rails教程 - 错误消息:预期响应是<重定向>,但是&lt; 200&gt; </redirect>

时间:2015-01-14 05:42:15

标签: railstutorial.org

测试&#34;清单8.20:用户使用有效信息登录的测试&#34;给我一个持久的错误信息:

 FAIL["test_login_with_valid_information", UsersLoginTest, 1.051300315]
 test_login_with_valid_information#UsersLoginTest (1.05s)
 Expected response to be a <redirect>, but was <200>
 test/integration/users_login_test.rb:22:in `block in <class:UsersLoginTest>'

测试是:

19   test "login with valid information" do
20    get login_path
21    post login_path, session: { email: @user.email, password: 'password' }
22    assert_redirected_to @user
23    follow_redirect!
24    assert_template 'users/show'
25    ....

Sessions控制器是我想象的导致此错误消息

def create
  user = User.find_by(email: params[:session][:email].downcase)
  if user && user.authenticate(params[:session][:password])
    log_in user
    redirect_to user  # What I want to happen
  else
    flash.now[:danger] = 'Invalid email/password combination'
    render 'new'      # What is happening
  end
end

如果用户已通过身份验证,则应重定向到用户个人资料页面 否则登录表单将呈现

所以我认为问题是我的测试用户没有经过身份验证。当我在网站上手动登录时,应用程序登录和重定向功能就好了。

test / fixtures / users.yml 此密码传递密码&#39;

   password_digest: <%= User.digest('password') %>

并且用户模型使用此功能来消化密码&#39;密码&#39;

 def User.digest(string)
  cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                              BCrypt::Engine.cost
  BCrypt::Password.create(string, cost: cost)
 end

问题出在哪里?还有更多我如何进行另一项测试,向我展示为什么这项测试失败?

2 个答案:

答案 0 :(得分:1)

如果我正在阅读这个问题,我会遇到类似(相同)的问题,并且为了清楚了解未来的浏览器,我将添加以下内容:由于Shonin指出该问题与控制器采用包含电子邮件地址的问题有关显然在users.yml代码中

michael:
  name: Michael Example
  email: Michael@example.com
  password_digest: <%= User.digest('password') %>

时不会过去
michael:
  name: Michael Example
  email: michael@example.com
  password_digest: <%= User.digest('password') %>

会通过。

答案 1 :(得分:0)

睡了一夜好觉后,我意识到这可能是由于数据库错误造成的。很低,看到我的数据库有一个大写的电子邮件,我的控制器提交了一个下载的电子邮件。

解决。