Rails单元测试 - 未定义方法'用户'

时间:2016-09-21 11:48:47

标签: ruby-on-rails ruby unit-testing ruby-on-rails-4 testunit

我一直试图弄清楚如何测试,但似乎没有什么能解决我的问题。每次我尝试运行任何测试时,都会收到此错误:

NoMethodError: undefined method `users' for #<#<Class:0x00560775e00768>:0x00560775e00470>

我如何在模型中运行我的测试:ruby test/models/plan_test.rb

我正在尝试运行最基本的测试(Rails给我一个例子),所以它没有链接到任何模型/夹具。 我的模特:

require File.expand_path("../../test_helper", __FILE__)

class PlanTest < ActiveSupport::TestCase
  test "the truth" do
    assert true
  end
end

我也创建了一个空的测试数据库,当我尝试在数据库中添加fixture时,我得到了同样的错误。

感谢您寻找:)

编辑: 跟踪夹具命令(rake db:fixtures:load RAILS_ENV=test --trace):

[DEPRECATION] `last_comment` is deprecated.  Please use `last_description` instead.
** Invoke db:fixtures:load (first_time)
** Invoke environment (first_time)
** Execute environment
** Invoke db:load_config (first_time)
** Execute db:load_config
** Execute db:fixtures:load
rake aborted!
NoMethodError: undefined method `users' for #<#<Class:0x005555661d3920>:0x005555661d3830>
(erb):4:in `get_binding'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/2.2.0/erb.rb:863:in `eval'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/2.2.0/erb.rb:863:in `result'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixture_set/file.rb:42:in `render'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixture_set/file.rb:33:in `rows'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixture_set/file.rb:24:in `each'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:760:in `block (2 levels) in read_fixture_files'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixture_set/file.rb:15:in `open'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:759:in `block in read_fixture_files'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:758:in `each'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:758:in `each_with_object'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:758:in `read_fixture_files'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:590:in `initialize'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:514:in `new'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:514:in `block (2 levels) in create_fixtures'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:511:in `map'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:511:in `block in create_fixtures'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/connection_adapters/abstract_mysql_adapter.rb:288:in `disable_referential_integrity'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/fixtures.rb:508:in `create_fixtures'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/activerecord-4.2.5/lib/active_record/railties/databases.rake:206:in `block (3 levels) in <top (required)>'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:248:in `call'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:248:in `block in execute'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:243:in `each'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:243:in `execute'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:187:in `block in invoke_with_call_chain'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:180:in `invoke_with_call_chain'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/task.rb:173:in `invoke'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:152:in `invoke_task'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:108:in `block (2 levels) in top_level'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:108:in `each'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:108:in `block in top_level'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:117:in `run_with_threads'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:102:in `top_level'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:80:in `block in run'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:178:in `standard_exception_handling'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/lib/rake/application.rb:77:in `run'
/home/ioana/.rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/rake-11.2.2/exe/rake:27:in `<top (required)>'
/home/ioana/.rbenv/versions/2.2.3/bin/rake:23:in `load'
/home/ioana/.rbenv/versions/2.2.3/bin/rake:23:in `<main>'
Tasks: TOP => db:fixtures:load

我的部分用户夹具(所有这些都具有相同的结构):

one:
  email: ioana1@ioana.com
  name: Ioana1
  password: MyString
  verified: 1
  token: MyString
  remember_token: MyString
  plan_id: <%= plan(:p0).id %>
  subscription_id: 1
  subscription_next_bill_date:
  email_hash: 1
  referred_by_user_id: <%= users(:two).id %>
  subscription_status: deleted

three:
  email: ioana3@ioana.com
  name: Ioana3
  password: MyString
  verified: 1
  token: MyString
  remember_token: MyString
  plan_id: <%= plan(:p1).id %>
  subscription_id: 1
  subscription_next_bill_date: 2016-08-04
  subscription_update_url: MyString
  subscription_cancel_url: MyString
  email_hash: 1
  subscription_registration_date: 2016-07-04
  subscription_status: active

2 个答案:

答案 0 :(得分:1)

试试这个:

one:
      email: ioana1@ioana.com
      name: Ioana1
      password: MyString
      verified: 1
      token: MyString
      remember_token: MyString
      plan: p0
      subscription_id: 1
      subscription_next_bill_date:
      email_hash: 1
      referred_by_user: two (or the way you named the self reference)
      subscription_status: deleted

http://api.rubyonrails.org/v2.3/classes/Fixtures.html

答案 1 :(得分:0)

检查您是否拥有名为app/models/user.rb的有效模型文件,如果您使用rails g model user生成了用户模型,或者您已为用户表创建了迁移,则表明您运行了迁移。< / p>

RAILS_ENV=test rake db:migrate

您的app/models/user.rb至少应包含:

 class User < ActiveRecord::Base
 end

更新:您在下面的评论表明您已删除了迁移文件。您可以随时让测试数据库通过执行来镜像开发DB     rake db:test:prepare