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 回答