2016-09-21 32 views
2

我一直在試圖弄清楚如何測試,但似乎沒有解決我的問題。每次我嘗試運行任何測試,我得到這個錯誤:Rails單元測試 - 未定義的方法'用戶'

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 

我已經創建了一個空的測試數據庫也一樣,當我嘗試添加數據庫裏面的燈具,我得到了同樣的錯誤。

謝謝你看:)

編輯: 跟蹤上夾具命令(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: [email protected] 
    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: [email protected] 
    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 
+1

能否請您發佈完整的堆棧跟蹤(不僅僅是錯誤信息)?因爲通常堆棧跟蹤會告訴你發生錯誤的確切文件和行,以及涉及調用該方法的所有方法。 – spickermann

+0

我更新了問題。我無法追蹤單元測試,但我張貼了夾具錯誤。 –

+1

看起來像問題是在您的燈具文件。你可以請張貼你的燈具嗎?或者在這些文件中搜索'用戶'並且只是發佈那個部分? – spickermann

回答

0

檢查您是否有有效的模型文件,稱爲app/models/user.rb,並且如果您使用生成用戶模型或者如果您爲用戶表創建了遷移,那麼您將運行遷移。

RAILS_ENV=test rake db:migrate 

app/models/user.rb應包含在最低限度:

class User < ActiveRecord::Base 
end 

更新:下面您的評論表示您已經刪除了遷移文件。你總是可以得到你的測試數據庫做 耙分貝鏡像發展DB:測試:準備

+1

我正在處理遺留數據庫時刪除了我的用戶模型遷移。這可能是問題嗎? (所以我的模式不反映我的數據庫) –

+0

是的。由於錯誤'未定義的方法'用戶'它表明該類沒有被定義在任何地方。 – lacostenycoder

+0

嘗試'rake db:test:prepare' – lacostenycoder

相關問題