Тест Rails rspec не проходит при переключении с sqlite3 на mysql2

У меня есть небольшое приложение для рельсов, в котором я изначально использовал sqlite3, а затем решил переключиться на mysql. После того, как я переключился, один из моих тестов rspec сломался, но я не могу сказать, почему (он работал нормально при использовании sqlite3, и проверка функциональности через фактическую страницу работает правильно).

Мои тесты следующие:

before(:each) do
    @a = FactoryGirl.create(:a)
    @b = FactoryGirl.create(:b)
    @relationship = @a.connector.build( :b_id => @b)
    @relationship.save
end

Тест 1:

it "should have the right b" do
    @relationship.b.should == @b
end

Тест 2:

it "should have the right a" do
    @relationship.a.should == @a
end

В моих тестах тест 1 терпит неудачу, а тест 2 проходит успешно при использовании mysql (оба пути при использовании sqlite3). Насколько я знаю, я не должен требовать каких-либо изменений в самих тестах, если я просто переключаю базы данных, поэтому может ли кто-нибудь сказать, делаю ли я что-то не так? Или если мне нужно что-то добавить, чтобы обновить базы данных?

В связи с этим, каков рекомендуемый способ отладки проблем в самих тестах rspec, особенно если фактическая разработка работает, но тесты терпят неудачу? (Я использую Rails 3.1 и rspec-rails 2.10.1).

Спасибо заранее за любые данные,

С уважением,


person Hawkeye001    schedule 19.06.2012    source источник


Ответы (1)


Недавно я столкнулся с этой проблемой; проблема была вызвана ошибочным поведением кэширования в моей модели.

В первой спецификации я кэшировал первый объект, который был создан с идентификатором 1. При повторном создании для второй спецификации объект был создан с идентификатором 1 в SQLite3 и с идентификатором 2 в MySQL.

Таким образом, поведение кэширования работало по счастливой случайности при тестировании на SQLite3 и постоянно терпело неудачу на MySQL.

person Duncan Bayne    schedule 25.06.2013