2016-04-05 13 views
1

私は現在、APIからMySQL2データベースのMySQLデータベースにデータを移動するアプリケーションを実行しています。ローカルデータベースに対するRspecのテスト

私はこのアプリケーションのRSPECテストを作成しようとしていますが、問題はアプリケーションが主にMySQLクエリであることです。クエリをテストして、期待される。

rspecをローカルで実行しているときにクライアントをsqlite3 gemに変更してみましたが、SQLite3とMySQL2が同じクエリを処理しないという問題があります。 (Mysql2はClient.queryを使用します(SQLiteはClient.executeを使用します)。

私はrails + rspecをローカルでsqliteをどのように使っているのかリモートでmysqlをエミュレートしようとしています。

外部サーバーをスピンアップすることなくローカルでこれを行う方法を教えてください。 ActiveRecordを使用する必要がありますか、またはアプリケーションの冒頭に作成しているMySQLクライアントに渡すことができるCSVファイルを作成する方法がありますか?

ご迷惑をおかけして申し訳ございませんが、この問題への取り組みをどのように調整できるか、ご意見をお寄せいただきありがとうございます。コードsnipppitsは以下の通りです:

RSPECは RSPEC test

Rubyのアプリケーション Ruby Application

答えて

1

をテストではなく、なぜちょうど完全にテスト環境でMySQLを使用しないで、四角い穴に丸いペグを合わせてみては? sqlite3は必ずしもMySQLを正確にエミュレートするわけではありませんので、ローカルマシン上でMySQLを設定して使用するだけで、より信頼性の高いテストを行う可能性が高くなります。テストがより速く実行されることがあります。

個人的には、自分が説明しているような問題を避けるため、私は実稼働中の同じタイプのデータベースに対して常にテストします。

+0

@Anythony E - だから私はそれをやってみることを考えましたが、sqliteデータベースをセットアップすることは、mysqlデータベースを設定するよりはるかに簡単です(私はそれらをレールの経験から交換可能に使うことができると思いました)。また、sqliteの利点は、誰かが宝石の外に他の前提条件をインストールしなくてもrspecを実行できるように、私はtest.dbファイルをソースコードに含めることができるということです。一方、私がmysqlを使って行うのであれば、コードに対してテストを実行したいユーザは、マシン上でmysqlサーバをローカルに実行する必要があります。 ローカルにmysqlを設定する方法がない限り、私は行方不明ですか? – TheTrueMzungu

+0

はい、利点はコストをはるかに上回ります。 sqliteをセットアップする方が簡単ですが、sqliteとMySQLの間に多くの違いがあるため、統合や管理が難しくなります。結果的に、テストスイートがそれを選択しなかったため予想外のエラーが発生します。 MySQLをローカルにセットアップして実行するのは非常に難しいことではありません。テストは常に空白の状態から実行する必要があるため、 'test.db'をソースコントロールにチェックインする必要はありません。 –

+0

私は先に進んで、あなたが示唆したようにそれを走らせました - 私は正直であると予想していたほど難しくありませんでした。私は助けに感謝します! – TheTrueMzungu

関連する問題