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)


Наскоро се сблъсках с този проблем; проблемът беше причинен от поведението на кеширане с грешки в моя модел.

В първата спецификация кеширах първия обект, който беше създаден с ID 1. Когато беше пресъздаден за втората спецификация, обектът беше създаден с ID 1 в SQLite3 и с ID 2 в MySQL.

И така, поведението на кеширане работеше случайно, когато беше тествано на SQLite3, и се проваляше постоянно на MySQL.

person Duncan Bayne    schedule 25.06.2013