メソッドが次のことを行うことを確認する単体テストがあります。
- 特定の値を持つモデルのすべてのインスタンスを検索します。
- それらを別の値に変更し、
- モデルをデータベースに保存します。
メソッドは想定どおりに動作しているように見えますが、テスト データベースは元の値に戻っているように見えます。
class PostTest < ActiveSupport::TestCase
test "publish queued posts" do
post = Post.new({:published => 'queue'})
post.save
Post.handle_queue
assert(post.published == 'published', "post should be published. actual value: #{post.published}")
end
end
test_publish_queued_posts(PostTest) ../test/unit/post_test.rb:13]:
post should be published. actual value: queue
コードをステップ実行すると、post
の 'published' 属性が に設定されていることは明らかですpublished
が、その時点からアサーションまでの間に値が に戻されqueue
ます。
これはひどい混乱です。ここで何が起こっているか分かりますか?それが違いを生む場合、永続化のためにmongo_mapperを使用しています。