2012-06-22 4 views
0

Только начиная с FactoryGirl. У меня есть модель с именем Subscription. Он имеет метод set_price, который, по-видимому, выполняет некоторые вычисления. Для того, чтобы сделать это, он должен задать другую модель для некоторых значений:Запрос другой модели изнутри модели, созданной FactoryGirl

def set_price 
    base_price = Option.find_by_key(:base_price).value.to_f 
    # […] some calculations 
end 

При запуске мои функции я получаю: (? Еще)

NoMethodError: 
      undefined method `value' for nil:NilClass 

Что вполне логично, так как я не сделал создайте любые Options.

Является ли FactoryGirl подходит для этого? Должен ли я создавать Option светильники в этом случае? Или просто издеваться над этим?

+0

Есть ли взаимосвязи ': has_many:: через 'между двумя моделями? –

+0

@SteveRowley nope. Они не связаны вообще - кроме того, для этого конкретного метода. –

+0

Хорошо, если бы они были связаны, я бы сказал, что вы могли бы сделать это без насмешек, но если нет, я согласен с принятым ответом. –

ответ

1

Это не удастся из-за отсутствия в базе данных параметров. Вы можете либо создать фабрику параметров перед вызовом set_price в тесте (вам нужно убедиться, что find_by_key (: base_price) в этом случае вернет ваш заводский вариант), или вы можете, как вы говорите, использовать макет:

option = mock_model('Option', :value => 1) 
Option.stub(:find_by_key).and_return(option) 

Макет имеет то преимущество, что он не коснется базы данных, но он потенциально более хрупкий.