2015-09-06 5 views
1

Пытается проверить модуль. Он работает, когда выполняется в консоли rails, но не при написании в качестве теста. Предположим следующее:Как тестировать ассоциации моделей Rails

  1. MyModel

    а) has_many: my_other_model

  2. MyOtherModel

    а) принадлежит к: my_model пример

Модуль:

module MyModule 

    def self.doit 
    mine = MyModel.first 
    mine.my_other_models.create!(attribute: 'Me') 
    end 

end 

Теперь тест:

require 'test_helper' 

class MyModuleTest < ActiveSupport::TestCase 

    test "should work" do 
    assert MyModule.doit 
    end 

end 

Возвращает:

NoMethodError: NoMethodError: undefined method `my_other_models' for nil:NilClass 

Теперь попробуйте то же самое в консоли:

rails c 

MyModule.doit 

работает просто отлично. Но почему бы не попробовать?

+1

Я думаю, что проблема в том, что вы не создаете 'MyModel' запись перед испытанием, поэтому' .first' возвращает ноль, я не знаю, как вы делаете это в MiniTest, но я думаю, что вы может google проверить это. –

+0

Спасибо Мохаммад! Да, проблема заключалась в том, что у моего тестового db нет записи, которая была в dev db. –

ответ

0

Ваша тестовая база данных пуста, когда вы запускаете этот тест, поэтому вызов MyModel.first собирается вернуть nil, тогда вы попытаетесь связать неизвестный метод с нулем. То, что вы, вероятно, захотите для своего тестового набора, - это fixture, который является всего лишь образцом данных. На данный момент вы можете просто создать первый экземпляр, чтобы заставить тест работать.

test "should work" do 
    MyModel.create #assuming the model is not validated 
    assert MyModule.doit 
    end 

Вы также можете реорганизовать свой модуль. Добавление if mine будет пытаться создать другие модели, если моя не ноль. Это позволит пройти тест, но это не соответствует цели вашего теста.

def self.doit 
    mine = MyModel.first 
    mine.my_other_models.create!(attribute: 'Me') if mine 
    end 
+0

Отлично! Благодарю. Будучи новичком в рельсах, я не знал, что рельсы консоли по умолчанию дедушки dev, а тесты идут ... test db. –

Смежные вопросы