2016-09-21 3 views
2

Я пытался выяснить, как тестировать, но ничто, кажется, не решает мою проблему. Каждый раз, когда я пытаюсь запустить любой тест, я получаю эту ошибку:Rails unit test - undefined method 'users'

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 

Я создал пустую тестовую базу данных, тоже, и когда я пытаюсь добавить светильники в базе данных, я получаю ту же ошибку.

Спасибо за глядя :)

Edit: Трассировка по команде арматуре (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 g model user или если вы создали миграцию для таблицы пользователей, то вы запускаете свои миграции.

RAILS_ENV=test rake db:migrate 

Ваш app/models/user.rb должен содержать по крайней мере:

class User < ActiveRecord::Base 
end 

UPDATE: Ваш комментарий ниже говорит, что вы удалили файл миграции. Вы всегда можете получить тестовую БД для зеркалирования DB развития, делая грабли DB: тест: подготовка

+1

Моя миграция модели пользователя была удалена, так как я работаю над устаревшей базой данных. Может ли это быть проблема? (так что моя схема не отражает мою базу данных) –

+0

Да. Поскольку ошибка 'undefined method 'users'' указывает, что класс не определен нигде. – lacostenycoder

+0

try 'rake db: test: подготовить' – lacostenycoder