我正在尝试设置一个新的Rails项目,并遇到一些与minitest有关的困难,特别是与设计。我正在尝试使用自定义控制器进行设计,但我目前无法测试它们。现在我只是想开始,所以我的测试是空的。一旦我运行第一个测试,就会抛出此错误。
我的控制器文件(' app / controllers / users / registrations_controller.rb')
class Users::RegistrationsController < Devise::RegistrationsController
# clear_respond_to
# respond_to :json
end
我的测试文件(&#39; test / controllers / users / registrations_controller_tests.rb&#39;)
require 'test_helper'
class Users::RegistrationsControllerTest < ActionController::TestCase
def setup
# @current_user = users(:one)
end
test 'POST #create will register a new user with a valid email and matching passwords' do
# params = {
# user: {
# email: 'test_email@mydomain.com',
# password: 'password',
# password_confirmation: 'password',
# format: :json
# }
# }
# post :create, params
# binding.pry
end
end
错误:
1) Error:
RegistrationsControllerTest#test_POST_#create_will_register_a_new_user_with_a_valid_email_and_matching_passwords:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: relation "controllers" does not exist
LINE 5: WHERE a.attrelid = '"controllers"'::regclass
^
: SELECT a.attname, format_type(a.atttypid, a.atttypmod),
pg_get_expr(d.adbin, d.adrelid), a.attnotnull, a.atttypid, a.atttypmod
FROM pg_attribute a LEFT JOIN pg_attrdef d
ON a.attrelid = d.adrelid AND a.attnum = d.adnum
WHERE a.attrelid = '"controllers"'::regclass
AND a.attnum > 0 AND NOT a.attisdropped
ORDER BY a.attnum
Error:
RegistrationsControllerTest#test_POST_#create_will_register_a_new_user_with_a_valid_email_and_matching_passwords:
NoMethodError: undefined method `each' for nil:NilClass
我试图删除并重新创建数据库,并运行rake db:test:prepare,一切都无济于事。我不知道这个错误源自何处。
我正在寻求有关如何解决此问题的建议,以便我可以继续进行测试。谢谢。
答案 0 :(得分:1)
正如预期的那样,问题完全是我自己做的。我曾在rails g devise controllers user
而不是rails g devise:controllers user
输入一个点。因此,rails完全按照我的要求去做,并为控制器模型创建文件,当然这些文件实际上并不存在。我删除了大部分文件,但在文件夹中发现了更多隐藏文件。现在我已经找到并删除了其余的这些文件,我的测试正在按预期工作。