以下のテストがあり、このモデルにフィクスチャがある場合、new_total が 1 少ないのではなく、total_unapproved と new_total が等しくなって失敗します。test_helper.rb のフィクスチャのロードを削除するかコメントアウトすると、期待どおりに動作します。
以下は、承認を true に設定するクラス関数です。それは間違いなく機能します。
def InviteRequest.approve_invites(number)
inv_reqs = InviteRequest.where("approved = ?", false).first(number)
inv_reqs.each do |inv_req|
inv_req.approved = true
inv_req.save
inv_req.send_approved_email
end
end
上記の関数を呼び出すテストは次のとおりです。
require 'test_helper'
class InviteRequestTest < ActiveSupport::TestCase
test "class method approve_invites(number) should approve 'number' InviteRequests" do
# ensure there is at least one instance
inv_req = InviteRequest.create(email: "hobojoe@test.com")
# set all InviteRequests.approved to false
InviteRequest.all.each {|r| r.approved = false; r.save}
total_unapproved = InviteRequest.where("approved = ?", false).count
Rails.logger.info "\nUnapproved Before: #{total_unapproved}"
InviteRequest.approve_invites(1)
new_total = InviteRequest.where("approved = ?", false).count
Rails.logger.info "Unapproved After: #{new_total}\n"
assert_equal total_unapproved - 1, new_total
end
end
理由はありますか?他のテストではフィクスチャを使用していませんが、いつか使用するかもしれません。