1

メソッドが次のことを行うことを確認する単体テストがあります。

  1. 特定の値を持つモデルのすべてのインスタンスを検索します。
  2. それらを別の値に変更し、
  3. モデルをデータベースに保存します。

メソッドは想定どおりに動作しているように見えますが、テスト データベースは元の値に戻っているように見えます。

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を使用しています。

4

1 に答える 1

3

アサーションの前にモデルをリロードする必要があると思います。

post.reload
assert(post.published == 'published', "post should be published. actual value: #{post.published}")
于 2012-12-24T02:58:47.657 に答える