RSpecリファレンス

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

日常のビジネスシナリオおよびユーザーシナリオをコネクターがサポートできることを検証し、システムがビジネス利用に十分かつ正確であることを確認するテストを設計します。

RSpecの基本設定

要約すると、任意のRSpecテストセットの手順は次のとおりです。

  1. コネクターインスタンスの作成
  2. 設定インスタンスの作成
  3. コネクターおよび設定インスタンスを使用して、関連するRSpecコマンドを実行します。
ruby
RSpec.describe 'methods/user_tenants', :vcr do
  let(:connector) { Workato::Connector::Sdk::Connector.from_file('connector.rb', settings) }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }

  subject(:result) { connector.methods.user_tenants(arg_1) }

  context 'when invoked' do
    ... # RSpec tests
  end
end

まず、Gemを使用してコネクターのインスタンスをインスタンス化する必要があります。 このコネクターインスタンスは、コネクター内のラムダを実行するための追加コマンドの呼び出しに使用されます。 これは上記のサンプルのlet(:connector) ...部分です。

次に、コネクションのインスタンスもインスタンス化する必要があります。 これはWorkato上の実際のコネクションと考えてください。 コネクターのインスタンスと設定のインスタンスは連携し、RSpecの実行中に有効なHTTPリクエストを送信できるようにします。 これは上記のサンプルのlet(:settings) ...部分です。

その後、RSpecコマンドはcontext属性で提供されます。

コネクターインスタンスの作成

from_file

RSpecテストで使用できるコネクターインスタンスをインスタンス化します。 これは任意のRSpecテストの基本的な構成要素です。

属性説明
目的コネクターインスタンスをインスタンス化する
入力path_to_file - テスト内のコネクターへのパス。

settings - 設定ファイルへのパス。 設定ファイルが事前に読み込まれたコネクターをインスタンス化するために使用されます。 これはimportです
出力使用可能なコネクターインスタンス
利用状況Workato::Connector::Sdk::Connector.from_file('connector.rb', settings)

設定インスタンスの作成

設定インスタンスを作成する方法は3つあります。

  1. デフォルトファイルから
  2. 指定したファイルから
  3. 暗号化ファイルから

from_default_file

RSpecテストで使用する設定インスタンスをインスタンス化する場合、ほとんどのケースでこれを使用します。 これも任意のRSpecテストの基本的な構成要素です。 これは暗号化ファイルと非暗号化ファイルの両方に使用できます。

名前付きコネクションを使用しない

設定ファイルには名前付きコネクションを含めないでください。 つまり、認証情報のセットは1つだけである必要があります。 たとえば、これは正しいです

yaml
api_key: valid_api_key
domain: valid_domain

これは正しくありません

yaml
My Valid Connection:
   api_key: valid_api_key
   domain: valid_domain
My invalid Connection:
   api_key: invalid_api_key
   domain: valid_domain
属性説明
目的コネクターインスタンスとともに使用する設定インスタンスをインスタンス化します。
入力該当なし
出力使用可能な設定インスタンス
利用状況Workato::Connector::Sdk::Settings.from_default_file

TIP

これを使用すると、まず呼び出し元のルートディレクトリでsettings.yaml.encファイルとmaster.keyファイルを検索します。 settings.yaml.encファイルが見つからない場合は、setting.yamlファイルがデフォルトになります。

from_file

RSpecテストで使用できる設定インスタンスをインスタンス化します。 これも任意のRSpecテストの基本的な構成要素です。

非暗号化settings.yamlファイルにはこれを使用してください。

属性説明
目的コネクターインスタンスとともに使用する設定インスタンスをインスタンス化します。 非暗号化settings.yamlファイルに使用されます。
入力path - 設定ファイルへのパス。

name - settings.yamlファイルに複数ある場合のコネクションの名前
出力使用可能な設定インスタンス
利用状況Workato::Connector::Sdk::Settings.from_file('settings.yaml')

from_encrypted_file

RSpecテストで使用できる設定インスタンスをインスタンス化します。 これも任意のRSpecテストの基本的な構成要素です。

暗号化settings.yaml.encファイルにはこれを使用してください。

属性説明
目的コネクターインスタンスとともに使用する設定インスタンスをインスタンス化します。 暗号化settings.yaml.encファイルに使用されます。
入力path - 設定ファイルへのパス。

name - settings.yamlファイルに複数ある場合のコネクションの名前

key - settings.yaml.encファイルの復号に使用するmaster.keyへのパス。
出力使用可能な設定インスタンス
利用状況Workato::Connector::Sdk::Settings.from_encrypted_file('settings.yaml.enc', 'master.key')

コネクションおよびtestラムダのテスト

connector_spec.rb内のさまざまなラムダをトリガーするには、connector.connection.[path](settings)を使用します。

属性説明
目的コネクションハッシュ内のさまざまなラムダを呼び出します。
入力settings - 設定インスタンス
出力さまざまなラムダの出力
利用状況connector.connection.[path](settings)例:connector.connection.authorization.acquireまたはconnector.connection.authorization.base_uri

connector_spec.rb内のtestラムダをトリガーするために、connector.test(settings)も使用できます。

属性説明
目的コネクター内のtestラムダを呼び出します。
入力settings - 設定インスタンス
出力testラムダの出力
利用状況connector.test(settings)

WARNING

testラムダに対してRSpecを実行する場合、acquireまたはtoken_urlラムダから取得されたトークンは、設定ファイルで既に更新され、有効である必要があることに注意してください。 RSpecは、CLI経由でworkato exec testを実行したときに発生するトークン更新フローをサポートしていません。

RSpecテストの例 - コネクションおよびtestラムダのテスト

ruby
RSpec.describe 'connector', :vcr do
  let(:connector) { Workato::Connector::Sdk::Connector.from_file('connector.rb', settings) }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }

  it { expect(connector).to be_present }

  describe 'connection' do
    # Assign the output variable as the output of your test lambda
    subject(:output) { connector.connection.authorization.acquire(settings) }

    context 'given valid credentials' do
      it 'successfully retrieves token' do
        expect(output).to be_truthy
      end
    end
  end

  describe 'test' do
    # Assign the output variable as the output of your test lambda
    subject(:output) { connector.test(settings) }

    context 'given valid credentials' do
      it 'establishes valid connection' do
        expect(output).to be_truthy
      end

      it 'returns response that is not excessively large' do
        # large Test responses might also cause connections to be evaluated wrongly
        expect(output.to_s.length).to be < 5000
      end
    end

    context 'given invalid credentials' do
      let(:settings) { Workato::Connector::Sdk::Settings.from_encrypted_file('invalid_settings.yaml.enc') }

      it 'establishes invalid connection' do
        expect { output }
          .to raise_error('500 Internal Server Error')
      end
    end
  end
end

アクションのテスト

RSpecの基本設定の後、コネクター内のさまざまなラムダを呼び出すことができます。 これは、コネクターインスタンスでインスタンスメソッドを呼び出すことで行います。

CLIコマンドworkato generate testを使用すると、specフォルダにスタブを自動生成できます。 各アクションには独自のspecファイルが割り当てられます。

アクション全体のテスト

schemaを含むアクション全体をテストするには、subject(:output) { connector.actions.[action_name](input) }を参照して、RSpecテストのsubjectにするだけです

属性説明
目的関連するschema変換やtoggle fieldsを含め、特定のコネクターのアクション全体を呼び出します。
入力input - レシピエディターからアクションに直接提供される入力jsonのJSON表現。
出力アクションの出力
利用状況connector.actions.[action_name](input)またはconnector.actions.[action_name].invoke(input)

RSpecテストの例 - アクション全体のテスト

ruby
RSpec.describe "actions/search_customers", :vcr do

  # Spec describes the most commons blocks of an action. Remove describes that you don"t need.
  # Ref: https://docs.workato.com/developing-connectors/sdk/cli/guides/cli/actions.html for test examples

  subject(:output) { connector.actions.search_customers(input) }

  let(:connector) { Workato::Connector::Sdk::Connector.from_file("connector.rb") }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }
  let(:input) { JSON.parse(File.read('fixtures/actions/search_customers/input.json')) }

  let(:expected_output) { JSON.parse(File.read('fixtures/actions/search_customers/output.json')) }

  describe 'Run entire action with valid input' do
    it 'gives expected output' do
      expect(output).to eq(expected_output)
    end
  end
end

executeラムダのテスト

コネクターインスタンス内の特定のアクションをトリガーするには、execute(**args)を使用します。

属性説明
目的特定のコネクターのexecuteラムダを呼び出します
入力settings - 設定インスタンス

input - executeラムダに提供される入力引数のJSON表現。

extended_input_schema - executeラムダに提供される拡張入力schema引数のJSON表現。

extended_output_schema - executeラムダに提供される拡張出力schema引数のJSON表現。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力executeラムダの出力
利用状況connector.actions.[action_name].execute(settings, input, extended_input_schema, extended_output_schema)

RSpecテストの例 - executeラムダのテスト

ruby
RSpec.describe "actions/search_customers", :vcr do

  # Spec describes the most commons blocks of an action. Remove describes that you don"t need.
  # Ref: https://docs.workato.com/developing-connectors/sdk/unit-testing.html#action for test examples

  let(:connector) { Workato::Connector::Sdk::Connector.from_file("connector.rb") }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }

  let(:action) { connector.actions.search_customers }

  describe "execute" do
    subject(:output) { action.execute(settings, input) }
    let(:input) { JSON.parse(File.read('input/search_customer_input.json')) }
    let(:expected_output) { JSON.parse(File.read('output/search_customer_output.json')) }

    context 'given valid input' do
      it 'gives expected output' do
        expect(output).to eq(expected_output)
      end
    end
  end
end

input_fieldsラムダのテスト

コネクターインスタンス内の特定のアクションでinput_fieldsラムダを呼び出すには、input_fields(**args)を使用します。

属性説明
目的特定のコネクターのinput_fieldsラムダを呼び出します
入力settings - 設定インスタンス

config_fields - config_fieldsラムダから渡される任意のconfig field値のJSON表現。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力input_fieldsラムダの出力
利用状況connector.actions.[action_name].input_fields(settings, config_fields))

TIP

object_definitions引数はコネクターインスタンスから自動的に使用できるため、明示的に渡す必要はありません。

output_fieldsラムダのテスト

コネクターインスタンス内の特定のアクションでoutput_fieldsラムダを呼び出すには、output_fields(**args)を使用します。

属性説明
目的特定のコネクターのoutput_fieldsラムダを呼び出します
入力settings - 設定インスタンス

config_fields - config_fieldsラムダから渡される任意のconfig field値のJSON表現。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力output_fieldsラムダの出力
利用状況connector.actions.[action_name].output_fields(settings, config_fields)

TIP

object_definitions引数はコネクターインスタンスから自動的に使用できるため、明示的に渡す必要はありません。

sample_outputラムダのテスト

コネクターインスタンス内の特定のアクションでsample_outputラムダを呼び出すには、sample_output(**args)を使用します。

属性説明
目的特定のコネクターのsample_outputラムダを呼び出します
入力settings - 設定インスタンス

input - executeラムダに提供される入力引数のJSON表現。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力sample_outputラムダの出力
利用状況connector.actions.[action_name].sample_output(settings, input)

利用可能なその他のアクションインスタンスメソッド:

  • summarize_input(**args)
  • summarize_output(**args)

トリガーのテスト

RSpecの基本設定の後、コネクター内のさまざまなラムダを呼び出すことができます。 これは、コネクターインスタンスでインスタンスメソッドを呼び出すことで行います。

CLIコマンドworkato generate testを使用すると、specフォルダにスタブを自動生成できます。 各トリガーには独自のspecファイルが割り当てられます。

各トリガースタブには、webhookとポーリングトリガーの両方について、すべての可能なラムダが含まれることに注意してください。 必要に応じて削除する必要があります。

トリガー全体のテスト

schemaを含むトリガー全体をテストするには、subject(:output) { connector.triggers.[trigger_name](input) }を参照して、RSpecテストのsubjectにするだけです

属性説明
目的関連するschema変換やtoggle fieldsを含め、特定のコネクターのトリガーpoll全体を呼び出します。
入力input - レシピエディターからアクションに直接提供される入力jsonのJSON表現。
出力schema変換を含むトリガーの出力
利用状況connector.triggers.[trigger_name](input)またはconnector.triggers.[trigger_name].invoke(input)

RSpecテストの例 - アクション全体のテスト

ruby
RSpec.describe "triggers/new_updated_object", :vcr do

  # Spec describes the most commons blocks of a trigger.
  # Depending on the type of your trigger remove describes that you don't need.
  # Learn more: https://docs.workato.com/developing-connectors/sdk/cli/reference/rspec-commands.html

  subject(:output) { connector.triggers.new_updated_object(input) }

  let(:connector) { Workato::Connector::Sdk::Connector.from_file("connector.rb") }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }
  let(:input) { JSON.parse(File.read('fixtures/triggers/new_updated_object/input.json')) }

  let(:expected_output) { JSON.parse(File.read('fixtures/triggers/new_updated_object/output.json')) }

  describe 'Run entire trigger with valid input' do
    it 'gives expected output' do
      expect(output).to eq(expected_output)
    end
  end
end

pollラムダのテスト

コネクターインスタンス内の特定のトリガーでpollラムダを呼び出すには、poll(**args)を使用します。 これにより、since入力で指定された、指定期間内のすべてのイベントについてページ分割されたレコードが取得されます。 ページ分割されたpollラムダの例を参照してください。

属性説明
目的コネクター内の特定のトリガーのpollラムダを呼び出し、ページ分割します
入力settings - 設定インスタンス

input - executeラムダに提供される入力引数のJSON表現。

closure - pollラムダの前回の呼び出しから渡される可能性があるclosureのJSON表現。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力pollラムダの出力
利用状況connector.triggers.[trigger_name].poll(settings, input, closure)

仕組み

このインスタンスメソッドは、Workatoのプラットフォーム上のポーリングメカニズムをシミュレートします。can_poll_more属性がtrueであるために発生する可能性があるページネーションも含まれます。これは複数のpollから単一の出力にまとめられます。 例: 1回目のpollの出力が次の場合

ruby
{
  events: [
    { 'id' => 2, 'title' => 'Post #2' },
    { 'id' => 1, 'title' => 'Post #1' }
  ],
  next_poll: 2,
  can_poll_more: true
}

かつ2回目のpollの出力が次の場合

ruby
{
  events: [
    { 'id' => 4, 'title' => 'Post #4' },
    { 'id' => 3, 'title' => 'Post #3' },
  ],
  next_poll: 4,
  can_poll_more: false
}

このメソッドの最終出力は次のとおりです

ruby
{
  events: [
    { 'id' => 4, 'title' => 'Post #4' },
    { 'id' => 3, 'title' => 'Post #3' },
    { 'id' => 2, 'title' => 'Post #2' },
    { 'id' => 1, 'title' => 'Post #1' }
  ],
  next_poll: 4,
  can_poll_more: false
}

poll_pageラムダのテスト

コネクターインスタンス内の特定のトリガーでpollラムダを呼び出すには、poll_page(**args)を使用します。 これにより、イベントがさらにある場合でも、単一のページのみが取得されます。

属性説明
目的コネクター内の特定のトリガーのpollラムダを呼び出し、ページ分割しません
入力settings - 設定インスタンス

input - executeラムダに提供される入力引数のJSON表現。

closure - pollラムダの前回の呼び出しから渡される可能性があるclosureのJSON表現。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力pollラムダの出力
利用状況connector.triggers.[trigger_name].poll_page(settings, input, closure)

TIP

これは、指定されたclosureに基づいて単一のpollをシミュレートします。 このインスタンスメソッドは複数回pollしません。

webhook_subscribeラムダのテスト

コネクターインスタンス内の特定のトリガーでwebhook_subscribeラムダを呼び出すには、webhook_subscribe(**args)を使用します。

属性説明
目的コネクター内の特定のトリガーのwebhook_subscribeラムダを呼び出します
入力webhook_url - 引数として渡されるwebhook URL。 これはrequest.bin URLでスタブ化できます。

settings - 設定インスタンス

input - webhook_subscribeラムダに提供される入力引数のJSON表現。

recipe_id - シミュレートされたレシピID。 指定しない場合、デフォルトでUUIDになります。
出力webhook_subscribeラムダの出力
利用状況connector.triggers.[trigger_name].webhook_subscribe(webhook_url, settings)

webhook_unsubscribeラムダのテスト

コネクターインスタンス内の特定のトリガーでwebhook_unsubscribeラムダを呼び出すには、webhook_unsubscribe(**args)を使用します。

属性説明
目的コネクター内の特定のトリガーのwebhook_unsubscribeラムダを呼び出します
入力subscribe_output - webhook_subscribeラムダの出力のJSON表現。
出力webhook_unsubscribeラムダの出力
利用状況connector.triggers.[trigger_name].webhook_unsubscribe(subscribe_output)

webhook_notificationラムダのテスト

コネクターインスタンス内の特定のトリガーでwebhook_notificationラムダを呼び出すには、webhook_notification(**args)を使用します。

属性説明
目的コネクター内の特定のトリガーのwebhook_notificationラムダを呼び出します
入力input - webhook_subscribeラムダに提供される入力引数のJSON表現。

payload - webhookペイロード。 テストする想定webhookペイロードを渡す必要があります。

extended_input_schema - executeラムダに提供される拡張入力schema引数のJSON表現。

extended_output_schema - executeラムダに提供される拡張出力schema引数のJSON表現。

header - webhookヘッダー。

params - webhookクエリパラメーター。

NOTE: これらの引数が不要な場合、定義する必要はありません。
出力webhook_notificationラムダの出力
利用状況connector.triggers.[trigger_name].webhook_notification(input, payload, extended_input_schema, extended_output_schema, header, params)

利用可能なその他のトリガーインスタンスメソッド:


methodラムダのテスト

connector.methods.<method_name>を使用して(**args)connector_spec.rb内のmethodラムダをトリガーします。

RSpecの基本設定の後、コネクター内のさまざまなラムダを呼び出すことができます。 これは、コネクターインスタンスでインスタンスメソッドを呼び出すことで行います。

CLIコマンドworkato generate testを使用すると、specフォルダにスタブを自動生成できます。 各methodには独自のspecファイルが割り当てられます。

属性説明
目的コネクター内の特定のmethodラムダを呼び出します。
入力構成可能。 methodによって異なります
出力methodラムダの出力
利用状況connector.methods.<method_name>(**args))

RSpecテストの例 - methodラムダのテスト

ruby
# frozen_string_literal: true

RSpec.describe "methods/make_schema_builder_fields_sticky", :vcr do
  let(:connector) { Workato::Connector::Sdk::Connector.from_file("connector.rb", settings) }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }

  subject(:result) { connector.methods.make_schema_builder_fields_sticky(schema) }

  context "given non-sticky schema" do
    let(:schema) { JSON.parse(File.read('fixtures/methods/make_schema_builder_fields_sticky/make_schema_builder_fields_sticky_input.json')) }
    let(:expected_output) { JSON.parse(File.read('fixtures/methods/make_schema_builder_fields_sticky/make_schema_builder_fields_sticky_output.json')) }
    it "makes all fields sticky" do
      expect(result).to eq(expected_output)
    end
  end
end

object_definitionsラムダのテスト

connector_spec.rb内のobject_definitionsラムダをトリガーするには、[object_definition_name].fields(**args)を使用します。

CLIコマンドworkato generate testを使用すると、specフォルダにスタブを自動生成できます。 各object_definitionsラムダには独自のspecファイルが割り当てられます。

属性説明
目的コネクター内の特定のobject_definitionsラムダを呼び出します。
入力settings - 設定インスタンス

config_fields - config_fieldsのJSON表現。
出力object_definitionsラムダの出力
利用状況connector.object_definitions.[object_definition_name].fields(settings, config_fields)

RSpecテストの例 - object_definitionラムダのテスト

ruby
# frozen_string_literal: true

RSpec.describe "object_definition/compound_type", :vcr do
  let(:connector) { Workato::Connector::Sdk::Connector.from_file("connector.rb", settings) }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }

  let(:object_definition) { connector.object_definition.compound_type }

  context 'Given event config input' do
    subject(:schema_fields) { object_definition.fields(settings, config_fields) }
    let(:config_fields) { { type: :event } }
    let(:expected_schema) { JSON.parse(File.read('fixtures/object_definitions/compound_type/definition_event.json')) }

    it 'returns schema definition' do
      expect(schema_fields).to be_kind_of(Array)
      expect(schema_fields).to match_array(expected_schema)
    end
  end
end

pick_listsラムダのテスト

connector.pick_lists.<pick_list_name>を使用して(settings, **args)connector_spec.rb内のpick_listsラムダをトリガーします。

CLIコマンドworkato generate testを使用すると、specフォルダにスタブを自動生成できます。 各pick_listsラムダには独自のspecファイルが割り当てられます。

属性説明
目的コネクター内の特定のpick_listsラムダを呼び出します。
入力settings - 設定インスタンス

構成可能。 pick_list引数によって異なります
出力pick_listsラムダの出力
利用状況connector.pick_lists.<pick_list_name>(settings, **args)

RSpecテストの例 - pick_listsラムダのテスト

ruby
# frozen_string_literal: true

RSpec.describe "pick_lists/events", :vcr do
  let(:connector) { Workato::Connector::Sdk::Connector.from_file("connector.rb", settings) }
  let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }

  subject(:pick_list) { connector.pick_lists.events(settings, config_fields) }


  context 'Given configuration parameter' do
    let(:config_fields) { { type: :city } }
    let(:expected_picklist) { JSON.parse(File.read('fixtures/pick_lists/events/pick_list_city.json')) }

    it 'returns schema definition' do
      expect(pick_list).to be_kind_of(Array)
      expect(pick_list).to match_array(expected_picklist)
    end
  end
end

Last updated: