rails在创建回调后的小测试

6uxekuva  于 2021-09-29  发布在  Java
关注(0)|答案(1)|浏览(292)

我正在试验tdd和minitest。现在我想简单地测试一下 after_create 回调在rspec中非常简单,但在minitest中就不那么简单了。我在下面 UserWallet 型号:

class User < ApplicationRecord
  after_create :create_wallet

  has_one :wallet, dependent: :destroy
end

class Wallet < ApplicationRecord
  belongs_to :user
end

如何测试 after_create 用迷你测试?我怀疑我是否应该这样做,但我很好。。。我认为这是tdd的一部分。

mwngjboj

mwngjboj1#

我认为你应该测试一下这个方法 :create_wallet 将被称为 only one time 在用户创建之后。然后,您肯定可以为该方法创建另一个测试用例 :create_wallet 它本身

require "test_helper"
require "active_support/testing/method_call_assertions"

class UserTest < ActiveSupport::TestCase
  include ActiveSupport::Testing::MethodCallAssertions

  test "after create callback" do
    user = User.new(...)
    assert_called(user, :create_wallet, times: 1) do
      user.save
    end
  end

  test "create wallet" do
    user = User.new(...)
    assert_changes -> {user.wallet.blank?}, from: true, to: false do
      user.save
    end

    # or assert_equal
    user = User.create(...) 
    assert_equal Wallet.last.user_id, user.id
    assert_equal 1, Wallet.where(user_id: user.id).count
  end
end

相关问题