0

以下のテストがあり、このモデルにフィクスチャがある場合、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

理由はありますか?他のテストではフィクスチャを使用していませんが、いつか使用するかもしれません。

4

3 に答える 3

0

新しいモデルに Rails ジェネレーターを使用すると、次のようなフィクスチャ ファイルも生成されます。

one: {}
# column: value
two: {}
#  column: value

フィクスチャを使用してテストを実行すると、Rails はこの 2 つの空のレコードを作成しようとします。移行に制約がある場合 (null でないなど)、テストは明らかな理由で失敗します。

解決策: フィクスチャ ファイル内のこの空のレコードをコメント アウトするか、適切なもので埋めてください。

于 2014-11-06T13:51:25.100 に答える
0

呼び出しているときに検証が失敗する可能性がありますInviteRequest#saveか? に置き換えsaveてみてsave!、テストがまだ合格するかどうかを確認してください。

于 2013-07-11T08:20:08.640 に答える