2

私はもともとsqlite3を使用していた小さなRailsアプリケーションを持っていますが、mysqlに切り替えることにしました。切り替えた後、rspec テストの 1 つが壊れましたが、その理由はわかりません (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 は失敗しますが、mysql を使用するとテスト 2 は成功します (sqlite3 を使用する場合は両方のパス)。私の知る限り、データベースを切り替えるだけであれば、テスト自体に変更を加える必要はありません。または、データベースを更新するために何かを追加する必要がある場合は?

関連するメモとして、特に実際の開発は機能するがテストが失敗する場合、rspec テスト自体の問題をデバッグするための推奨される方法は何ですか? (Rails 3.1 と rspec-rails 2.10.1 を使用しています)。

ご意見をお寄せいただきありがとうございます。

よろしく、

4

1 に答える 1

0

最近、この問題に遭遇しました。この問題は、モデルのキャッシング動作のバグが原因でした。

最初の仕様では、ID 1 で作成された最初のオブジェクトをキャッシュしていました。2 番目の仕様で再作成すると、オブジェクトは SQLite3 では ID 1 で作成され、MySQL では ID 2 で作成されました。

そのため、キャッシングの動作は、SQLite3 でテストしたときに運が良かったのですが、MySQL では一貫して失敗していました。

于 2013-06-25T06:07:53.080 に答える