2015-09-01 2 views
0

Я пытаюсь что-то очень распространенное я думаю, но я не могу это сделать из-за транзакционного примера.Rspec - Тестирование модели перед установкой модели

Вот что я пытаюсь сделать

class A < ActiveRecord::Base 
    has_many :b 
end 

class B < ActiveRecord::Base 
belongs_to :a 
end 

Для TestCase

describe A do 
    before(:all) do 
    @a = Factory.create :a 
    @a.b.create() 
    # Lot of other things which is common to all example 
    end 

    it { expect state_one(@a) } 
    it { expect state_two(@a) } 
end 

Что я пытаюсь сделать, это создать все предпосылки для испытаний в перед всеми и иметь только одно ожидание на пример. Проблема заключается в том, что в таблице A или B нет строк в контексте примеров.

Пожалуйста, дайте мне знать, если это правильный подход, если да, как я могу это сделать?

ответ

1

Вы можете иметь настройки, как это:

describe A do 
    subject do 
     create(:a).tap do |a| 
     create(:b, a: a) 
     end 
    end 

    before(:all) do 
     # Lot of other things which is common to all example 
    end 

    context 'state_one' do 
     it { expect state_one(@a) } 
    end 

    context 'state_two' do 
     it { expect state_two(@a) } 
    end 
    end 

Если предположить, что у вас есть заводы по a и b и настройки их объединения должным образом.

+0

Итак, что-нибудь в теме сохраняется и может использоваться на разных примерах? – sethi

+0

Да, вроде. предметный блок оценивается ленивым. Значения, 'a' создается, когда он впервые используется в примере, и его можно использовать в примерах. –

+0

Помогло ли это? Дайте мне знать, если у вас есть другие вопросы. –

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