断言失败,没有给出消息:rails

时间:2015-02-05 03:54:15

标签: ruby-on-rails tdd railstutorial.org

我一直在研究Hartl的RoR教程,并且已经坚持了一段时间。我正在尝试使用以下命令运行帐户激活测试:

$ bundle exec rake test

我最终得到了这个:

1) Failure:
    UsersSignupTest#test_valid_signup_information_with_account_activation     [/Users/*name/blogger1/test/integration/users_signup_test.rb:44]:
Failed assertion, no message given.

这是我的users_signup_test.rb文件中的测试代码:

require 'test_helper'

class UsersSignupTest < ActionDispatch::IntegrationTest

def setup
  ActionMailer::Base.deliveries.clear
end

test "invalid signup information" do
  get signup_path
  assert_no_difference 'User.count' do
    post users_path, user: { name:  "",
                           email: "user@invalid",
                           password:              "foo",
                           password_confirmation: "bar" }
end
assert_template 'users/new'
assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'
end

test "valid signup information with account activation" do
get signup_path
assert_difference 'User.count', 1 do
  post users_path, user: { name:  "Example User",
                           email: "user@example.com",
                           password:              "password",
                           password_confirmation: "password" }
end
assert_equal 1, ActionMailer::Base.deliveries.size
user = assigns(:user)
assert_not user.activated?
# Try to log in before activation.
log_in_as(user)
assert_not is_logged_in?
# Invalid activation token
get edit_account_activation_path("invalid token")
assert_not is_logged_in?
# Valid token, wrong email
get edit_account_activation_path(user.activation_token, email: 'wrong')
assert_not is_logged_in?
# Valid activation token
get edit_account_activation_path(user.activation_token, email: user.email)
assert user.reload.activated?
follow_redirect!
assert_template 'users/show'
assert is_logged_in?
end
end

当我按照教程操作时,我正在按照代码并自行输入代码。但是,这一次,我回过头来复制粘贴所有问题。关于它可能是什么的任何想法?

第44行是:

assert user.reload.activated?

但是我找不到其他地方可以相关的东西吗?

3 个答案:

答案 0 :(得分:0)

昨天我遇到了同样的问题,问题不在于测试,而是在'激活?'方法本身无法正常工作。

我通过追溯'激活'来找到解决方案?输入错误的方法,在我的例子中,我在用户模型的create_activation_digest方法中找到了它。

希望这有帮助。

答案 1 :(得分:0)

我有完全相同的问题并解决了它。 就我而言,原因是缺少AccountActivationsController中的log_in(user)方法。

请确保您在AccountActivationsController中登录成功激活的用户。

class AccountActivationsController < ApplicationController

  def edit
    user = User.find_by(email: params[:email])
    if user && !user.activated? && user.authenticate_with_token(:activation, params[:id])
      user.activate
      **log_in user**
      flash[:success] = "Account activated!"
      redirect_to user
    else
      flash[:danger] = "Invalid activation link"
      redirect_to root_url
    end
  end
end

Michael Hartl的Ruby on Rails Tutorial

答案 2 :(得分:-1)

确保更改经过身份验证的布尔值?方法:return false if digest.nil?。我的错误源于此。