2014-09-19 2 views
0

Я знаю, что база данных тестовых посевов - это своего рода bad idea. Мне нужно проверить связь Stripe api в моих модельных тестах. Я знаю, что внешние запросы в модульных тестах тоже плохая идея, но тем не менее.Семенные записи в rspec и Factory Girl

Учетная полоса имеет статичные имена плана подписки. Поэтому, когда я тестирую функциональность, связанную с Stripe, мне нужно взять их из моей базы данных. Я использую Factory Girl камень в качестве источника арматуры, но так как мне нужно только отдельных имена для планов Stripe я зашит их на завод:

factory :subscription_type do 
    name "Personal" 
    frequency "month" 
    stripe_plan_id "personal" 
    end 

Других заводы, которые используют этот один пытаются создать каждый раз новый объект с одинаковые значения полей и благодаря проверке уникальности на модели subscription_type, фабрики вызывают ошибки. Я бы предпочел, чтобы все они использовали одну и ту же запись (если она существует), если она вызвана в одном примере.

Какая практика, ребята?

ответ

0

Почему бы не использовать sequence(:unique_field) {|n| "unique_field #{n}"}, это сделает переменную n с заказом, тогда поле будет уникальным.

+0

Это не уникальность, о которой я забочусь: мне нужно технически обратное. –

+0

Мне нужен только один экземпляр объекта subscription_type на всех фабриках. Таким образом, они не создают каждый раз новый уникальный subscription_type –

0

Если вы хотите иметь только один объект subscription_type, попробуйте создать его первый, и передать его в качестве параметра для других заводов:

@subscription_type = FactoryGirl.create :subscription_type 

@other_object = FactoryGirl.create :other_object, subscription_type: @subscription_type 

Вы также могли бы попытаться определить смарт-связь для вашего завод, где он проверяет, существует ли тип подписки до:

FactoryGirl.define do 
    factory :user do 
     subscription_type { SubscriptionType.first.present? ? SubscriptionType.first : FactoryGirl.create(:subscription_type) } 
    end 
end 
+0

Да, это решит проблему, но цена немного высока: вам нужно заботиться об уникальности @subscription_type через тесты самостоятельно. Я надеялся на решение на уровне завода –

+0

Да, это просто и кажется решим. Глупый мне, спасибо, попробуй. –

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