【问题标题】:Rails database changes aren't persisting through testsRails 数据库更改不会通过测试持续存在
【发布时间】:2015-11-23 22:36:30
【问题描述】:

我正在为我当前的 rails 项目编写测试,我遇到了一个问题,即通过 post 调用对测试数据库所做的更改没有持续足够长的时间来测试更改。

基本上,我有分配给它们的条形码的对象。我已经输入了一个表格,用户可以扫描多个条形码以一次更改多个对象。这是代码。

objecta_controller.rb:

  def change_many
    @barcodes = params[:barcodes].split()
    @objects = ObjectA.order("barcode").where(barcode: @barcodes)
    @objects.each do |b|
      if can? :change, b
        b.state_b()
      end
    end
  end

(注意:@barcodes 是一串由空格分隔的条形码)

objecta_controller_test.rb:

test "change object" do
    sign_in_as(:admin_staff)

    b = ObjectA.new(
      barcode: "PL123456",
      current_status: "state_a")
    post :change_many, { barcodes: b.barcode }

    assert_equal("state_b", b.current_status, "Current status incorrect: #{b.to_s}")
  end

使用 byebug,我已经确定对象在 change_many 方法中确实改变了状态,但是一旦返回测试,对象的状态就会恢复到原来的状态并且测试失败。

【问题讨论】:

  • 尝试重新加载b.reload assert_equal调用之前

标签: ruby-on-rails ruby unit-testing testing


【解决方案1】:

首先,您将一个尚未保存的内存对象保存到数据库中,所以首先:

  • 在您的帖子前添加 b.save

其次,您在内存中的对象将不会自动反映数据库中的更改。你必须告诉它刷新它的状态,所以:

  • 在断言之前添加 b.reload

【讨论】:

    猜你喜欢
    • 2011-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-24
    • 1970-01-01
    • 2021-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多