我正在寻找一个奇怪问题的解决方案。我有一个控制器,需要身份验证(使用 devise gem)。我添加了 Devise TestHelpers 但无法让它工作。
require 'test_helper'
class KeysControllerTest < ActionController::TestCase
include Devise::TestHelpers
fixtures :keys
def setup
@user = User.create!(
:email => '[email protected] /cdn-cgi/l/email-protection',
:password => 'MyTestingPassword',
:password_confirmation => 'MyTestingPassword'
)
sign_in @user
@key = keys(:one)
end
test "should get index" do
get :index
assert_response :success
assert_not_nil assigns(:keys)
end
test "should get new" do
get :new
assert_response :success
end
test "should create key" do
assert_difference('Key.count') do
post :create, :key => @key.attributes
end
assert_redirected_to key_path(assigns(:key))
end
test "should destroy key" do
assert_difference('Key.count', -1) do
delete :destroy, :id => @key.to_param
end
assert_redirected_to keys_path
end
end
我在“rake test”窗口中得到以下输出:
29) Failure:
test_should_create_key(KeysControllerTest) [/test/functional/keys_controller_test.rb:29]:
"Key.count" didn't change by 1.
<3> expected but was
<2>.
30) Failure:
test_should_destroy_key(KeysControllerTest) [/test/functional/keys_controller_test.rb:37]:
"Key.count" didn't change by -1.
<1> expected but was
<2>.
31) Failure:
test_should_get_index(KeysControllerTest) [/test/functional/keys_controller_test.rb:19]:
Expected response to be a <:success>, but was <302>
32) Failure:
test_should_get_new(KeysControllerTest) [/test/functional/keys_controller_test.rb:25]:
Expected response to be a <:success>, but was <302>
有人可以告诉我,为什么设计无法验证?我对 AdminController 使用完全相同的过程,并且效果完美。
您是否正在使用带有可确认功能的 Devise?在这种情况下,创建是不够的,您需要使用以下命令来确认用户@user.confirm!
其次,为什么在功能测试中创建用户?在夹具中声明您的用户,如下所示(如果您只需要确认,则为confirmed_at):
测试/装置/user.yml:
user1:
id: 1
email: [email protected] /cdn-cgi/l/email-protection
encrypted_password: abcdef1
password_salt: efvfvffdv
confirmed_at: <%= Time.now %>
并使用以下命令在功能测试中登录它们:
sign_in users(:user1)
编辑:我刚刚看到,在我的应用程序中,Devise-Testhelpers 在 test/test-helpers.rb 中声明,我不知道这是否有影响,也许你想尝试:
ENV["RAILS_ENV"] = "test"
require File.expand_path('../../config/environment', __FILE__)
require 'rails/test_help'
class ActionController::TestCase
include Devise::TestHelpers
end
class ActiveSupport::TestCase
# Setup all fixtures in test/fixtures/*.(yml|csv) for all tests in alphabetical order.
#
# Note: You'll currently still have to declare fixtures explicitly in integration tests
# -- they do not yet inherit this setting
fixtures :all
# Add more helper methods to be used by all tests here...
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)