RSpecリファレンス
日常のビジネスシナリオおよびユーザーシナリオをコネクターがサポートできることを検証し、システムがビジネス利用に十分かつ正確であることを確認するテストを設計します。
RSpecの基本設定
要約すると、任意のRSpecテストセットの手順は次のとおりです。
- コネクターインスタンスの作成
- 設定インスタンスの作成
- コネクターおよび設定インスタンスを使用して、関連するRSpecコマンドを実行します。
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つあります。
from_default_file
RSpecテストで使用する設定インスタンスをインスタンス化する場合、ほとんどのケースでこれを使用します。 これも任意のRSpecテストの基本的な構成要素です。 これは暗号化ファイルと非暗号化ファイルの両方に使用できます。
名前付きコネクションを使用しない
設定ファイルには名前付きコネクションを含めないでください。 つまり、認証情報のセットは1つだけである必要があります。 たとえば、これは正しいです
api_key: valid_api_key
domain: valid_domainこれは正しくありません
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ラムダのテスト
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テストの例 - アクション全体のテスト
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
endexecuteラムダのテスト
コネクターインスタンス内の特定のアクションをトリガーするには、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ラムダのテスト
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
endinput_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テストの例 - アクション全体のテスト
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
endpollラムダのテスト
コネクターインスタンス内の特定のトリガーで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の出力が次の場合
{
events: [
{ 'id' => 2, 'title' => 'Post #2' },
{ 'id' => 1, 'title' => 'Post #1' }
],
next_poll: 2,
can_poll_more: true
}かつ2回目のpollの出力が次の場合
{
events: [
{ 'id' => 4, 'title' => 'Post #4' },
{ 'id' => 3, 'title' => 'Post #3' },
],
next_poll: 4,
can_poll_more: false
}このメソッドの最終出力は次のとおりです
{
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) |
利用可能なその他のトリガーインスタンスメソッド:
- input_fields
- output_fields
- sample_output
summarize_input(**args)summarize_output(**args)dedup
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ラムダのテスト
# 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
endobject_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ラムダのテスト
# 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
endpick_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ラムダのテスト
# 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
endLast updated: