Rails 4-设计自定义控制器测试错误

时间:2015-12-09 17:47:50

标签: ruby-on-rails ruby-on-rails-4 activerecord devise minitest

我正在尝试设置一个新的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,一切都无济于事。我不知道这个错误源自何处。

我正在寻求有关如何解决此问题的建议,以便我可以继续进行测试。谢谢。

1 个答案:

答案 0 :(得分:1)

正如预期的那样,问题完全是我自己做的。我曾在rails g devise controllers user而不是rails g devise:controllers user输入一个点。因此,rails完全按照我的要求去做,并为控制器模型创建文件,当然这些文件实际上并不存在。我删除了大部分文件,但在文件夹中发现了更多隐藏文件。现在我已经找到并删除了其余的这些文件,我的测试正在按预期工作。