2014-05-08 4 views
1

У меня есть эта проблема с тестированием, у меня есть логика, которая меняет позиции, например, если у меня есть 1, 2, 3 и я даю для 3 позиции 1, чем 1, 2 станет 2, 3. Теперь я пытаюсь проверить это, но я не могу понять это!rspec изменяющий атрибут не меняет другие записи

Вот мои тесты:

describe "order change" do 
    let(:city){FactoryGirl.create(:city)} 
    let(:place){FactoryGirl.create(:place, city_id: city.id)} 
    let(:place_sec){FactoryGirl.create(:place, city_id: city.id)} 
    let(:place_th){FactoryGirl.create(:place, city_id: city.id)} 

context "when editing record" do 
     it "should go up and change middle records" do 
     place 
     place_sec 
     place_th 
     expect{ 
      place_id = Place.find(place.id) 
      place_id.update_attributes(item_position: 3) 
     }.to change(Place.find(place_sec.id), :item_position).from(2).to(1) 
     end 
    end 

Это не работает, что мне нужно сделать для этого, чтобы работать? Метод для переупорядочения вызывается с обратным вызовом before_save

+0

'place \ n place_sec \ n place_th' это вы призвали действительно создавать записи? Итак, 'cite' создает где-то поверх? (Я не знаю, что это хорошо). Существует разница между 'let' и' let! ', Возможно, вы должны использовать последний. – zishe

+1

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

ответ

2

Okey googling и stackoverflow вокруг меня обнаружили, что мне нужно загрузить объект, чтобы получить нужные мне результаты. Что-то вроде этого:

describe "order change" do 
    let(:city){FactoryGirl.create(:city)} 
    let(:place){FactoryGirl.create(:place, city_id: city.id)} 
    let(:place_sec){FactoryGirl.create(:place, city_id: city.id)} 
    let(:place_th){FactoryGirl.create(:place, city_id: city.id)} 

context "when editing record" do 
     it "should go up and change middle records" do 
     place 
     place_sec 
     place_th 
     expect{ 
      place.update_attributes(item_position: 3) 
      place_sec.reload 
     }.to change{place_sec.item_position}.from(2).to(1) 
     end 
    end 
Смежные вопросы