1

MiniTest フレームワークを使用しており、モデル テストを作成したいと考えています。これは私のテストコードです:

it "must find or create authentication" do
  auth = Authentication.find_by_provider_and_uid( @auth.provider,
  @auth.uid )
  val = auth.nil?
  if val==true
    Authentication.create_with_omniauth @auth
  end
end

Authentication.find_by_provider_and_uidこのテストは、メソッドが存在するかどうかを確認し、authnil の場合は新しい を作成しますauth

節を使って書きましたifが、本当かどうかわかりません。このテストを修正するにはどうすればよいですか?

4

1 に答える 1

1

あなたの質問にはコードがないので、あなたがminitest-railsを使用していて、適切に構成されていると仮定します。

次のコードがあるとします。

class Authentication < ActiveRecord::Base
  def self.find_by_provider_and_uid provider, uid
    self.where(provider: provider, uid: uid).first_or_initalize
  end
end

さらに、次のフィクスチャデータがあると仮定しますtest/fixtures/authentications.yml

test_auth:
  provider: twitter
  uid: abc123
  user: test_user

次のようなテストがあります。

describe Authentication do

  describe "find_by_provider_and_uid" do

    it "retrieves existing authentication records" do
      existing_auth = authentications :test_auth
      found_auth = Authentication.find_by_provider_and_uid existing_auth.provider, existing_auth.uid
      refute_nil found_auth, "It should return an object"
      assert found_auth.persisted?, "The record should have existed previously"
      assert_equal existing_auth, found_auth
    end

    it "creates a new authentication of one doesn't exist" do
      new_auth = Authentication.find_by_provider_and_uid "twitter", "IDONTEXIST"
      refute_nil new_auth, "It should return an object"
      assert new_auth.new_record?, "The record should not have existed previously"
    end

  end

end

FWIW、私はこのメソッドの名前が好きではありません。名前は動的ファインダーに似ていますが、動作は異なります。メソッドの名前を に変更しfor_provider_and_uidます。

于 2013-03-05T16:36:05.197 に答える