期待x但渲染y

时间:2015-09-19 07:32:50

标签: ruby-on-rails ruby

我有以下错误:

test "login with invalid information" do
    get login_path
    assert_template 'session/new'
    post login_path, session: { email: "", password: "" }
    assert_template 'session/new'
    assert_not flash.empty?
    get root_path
    assert flash.empty?
  end 

user_login_test.rb中的相关代码:

require 'test_helper'

class UsersEditTest < ActionDispatch::IntegrationTest
  def setup
    @user = User.find_by_name(:testuser)
  end

    test "unsuccessful edit" do 
      log_in_as(@user)
      get edit_user_path(@user)
      assert_template 'users/edit'
      patch user_path(@user), user: { name: "",
                                      email: "foo@invalid",
                                      password: "foo",
                                      password_confirmation: "bar" }
     assert_template 'users/edit'
    end

    test "successful edit" do
      log_in_as(@user)
      get edit_user_path(@user)
      assert_template 'users/edit'
      name = "Foo Bar"
      email = "foo@bar.com"
      patch user_path(@user), user: { name: name,
                                     email: email,
                                     password: "",
                                     password_confirmation: "" }
     assert_not flash.empty?
     assert_redirected_to @user
     @user.reload
     assert_equal name, @user.name
     assert_equal email, @user.email
    end

end

users_edit_test.rb:

  def log_in_as(user, options = {})
    password = options[:password] || 'password'
    remember_me = options[:remember_me] || '1'
    if integration_test?
      get login_path
        post login_path, session: { email:      user.name,
                                   password:    password,
                                   remember_me: remember_me 
                                 } 
    else
        session[:user_id] = user.id
    end
  end

经过几个小时的努力追捕问题,我仍然无法找到它。跟踪几个问题,我觉得这可能是以下测试登录代码的问题:

FIREBIRD_LOCK

我很乐意根据需要更新更多信息,但我很不知所措。

2 个答案:

答案 0 :(得分:1)

您似乎重定向而不是渲染。试试这个:

expect(response).to redirect_to root_path

确保您重定向

答案 1 :(得分:0)

我目前正在研究同一Rails tutorial的第9章,我遇到了几乎相同的问题。在控制台中玩了一段时间之后,我决定在浏览器中手动测试它,即使我已经登录,也确实无法进入我的编辑页面。这让我觉得它可能不是我测试的问题而是使用users_controller中的授权。

原来我完全忘记将redirect_to login_url(在logged_in_user过滤器中)放在一个除外块中,所以无论如何它总是只是重定向到登录页面。正确的代码是:

def logged_in_user
  unless logged_in?
    flash[:danger] = 'Please log in.'
    redirect_to login_url
  end
end

现在我的测试正在通过。也许你遇到过类似的问题。无论哪种方式,我经常发现只返回浏览器并尝试手动复制集成测试很有用,只是为了弄清楚我的代码是否存在问题,或者我只是写了一个狡猾的人测试