# How to ガイド - テストの作成
ここでは、コネクターにある lambda のテストを作成する方法について説明します。1つのアクションの execute lambda についてテストを作成しますが、他の lambda についても同様の方法でテストを作成できます。
# サンプルコネクター
connector.rb
のコードを以下に示します。
{
title: 'Chargebee-demo',
connection: {
fields: [
{
name: 'api_key',
control_type: 'password',
hint: 'You can find your API key final change3' \
"under 'Settings'=>'Configure Chargebee'=>'API Keys and Webhooks'" \
" in Chargebee's web console.",
label: 'Your API Key'
},
{
name: 'domain',
control_type: 'subdomain',
url: 'chargebee.com'
}
],
authorization: {
type: 'basic_auth',
apply: lambda do |connection|
user(connection['api_key'])
end
},
base_uri: lambda do |connect|
"https://#{connect['domain']}.chargebee.com"
end
},
test: lambda do |_connection|
get('/api/v2/plans', limit: 1)
end,
actions: {
search_customers: {
title: 'Search customers',
subtitle: 'Search for customers using name',
description: 'Search customer in Chargebee',
input_fields: lambda do |_object_definitions|
[
{
name: 'name',
label: 'Name to query by',
hint: 'Provide the name of the customer to query'
},
{
name: 'id',
label: 'Name to query by',
hint: 'Provide the name of the customer to query'
}
]
end,
execute: lambda do |_connection, input, _input_schema, _output_schema|
get('/api/v2/customers', input)
end,
output_fields: lambda do |_object_definitions|
[
{
name: 'first_name'
},
{
name: 'last_name'
},
{
name: 'id'
}
]
end
}
},
}
settings.yaml.enc
に格納されている資格情報です。
api_key: valid_api_key
domain: valid_domain
# テストの生成
アクションごとに個別に spec ファイルを作成したり、workato generate test
コマンドを使用してコネクターを元にテストを生成したりすることができます。生成される spec ファイルには、テストを書き始めるのに必要なほとんどのスタブが含まれます。
# サンプルの RSpec の内容
RSpec.describe 'actions/search_customers', :vcr do
subject(:output) { connector.actions.search_customers(input) }
let(:connector) { Workato::Connector::Sdk::Connector.from_file('connector.rb', settings) }
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 'given valid input' do
it 'gives expected output' do
expect(output).to eq(expected_output)
end
end
let(:action) { connector.actions.search_customers }
describe 'execute' do
subject(:output) { action.execute(settings, input) }
let(:input) { JSON.parse(File.read('fixtures/actions/search_customers/input_parsed.json')) }
let(:expected_output) { JSON.parse(File.read('fixtures/actions/search_customers/output.json')) }
context 'given valid input' do
it 'gives expected output' do
expect(output).to eq(expected_output)
end
end
end
describe 'sample_output' do
subject(:sample_output) { action.sample_output(settings, input) }
pending 'add some examples'
end
describe 'input_fields' do
subject(:input_fields) { action.input_fields(settings, config_fields) }
pending 'add some examples'
end
describe 'output_fields' do
subject(:output_fields) { action.output_fields(settings, config_fields) }
pending 'add some examples'
end
end
ここには、このアクションのさまざまなテストのスタブが用意されています。これは Gem を使用してテストを生成する際に提供されます。今回は、execute
lambda だけのテストを作成する方法について説明します。
# ステップ1 - コネクターインスタンスの定義
テストを開始するには、Workato SDK Gem を使用してコネクターのインスタンスを作成する必要があります。
let(:connector) { Workato::Connector::Sdk::Connector.from_file('connector.rb', settings) }
# ステップ2 - 設定インスタンスの定義
次に、Workato SDK Gem を使用して設定のインスタンスを作成する必要があります。これは、Workato でのコネクションと同じことを意味します。前に定義したコネクターインスタンスも、この設定インスタンスを使うことに注意してください。
let(:settings) { Workato::Connector::Sdk::Settings.from_default_file }
# ステップ3 - アクションの定義
関連するインスタンスを作成したら、テストの残りの部分で簡単に参照できるように action
をインスタンス化しておきます。
let(:action) { connector.actions.search_customers }
# ステップ3 - テストの説明と対象の定義
ここで、実行したいテスト「群」について説明します。ここではキーワードに execute
を使います。その後に、テストの subject
(対象) も定義します。ここで、search_customers
アクションの execute
lambda を実行しているコネクターインスタンスに output
の値を割り当てます。これは action.execute(settings,input)
を定義することで行われます。
describe 'execute' do
subject(:output) { action.execute(settings, input) }
TIP
テストを作成する際、execute
に2つの引数 (extended_input_schema
と extended_output_schema
) が追加されていることを不思議に思うかもしれません。コネクターで定義する execute:
lambda と同様、ここでの execute
は同じ4つの引数を受け取ることができます。このアクションでは不要なため、削除してあります。
# ステップ4 - 個々のテストに対するアサーションの宣言
テストの成功または失敗を判断するには、比較を宣言しておく必要があります。
ここでは、execute
lambda の出力が、有効な入力を指定した場合の既知のレスポンスと等しくなることを「expect (期待)」すると宣言しています。input
と expected_output
という2つの新しい変数を作成して、この宣言を行っています。expected_output
を手動で生成する必要はありませんが、CLI コマンドを実行して execute
lambda を呼び出すと生成されます。例: workato exec actions.search_customers.execute --input='fixtures/actions/search_customers/input.json' --output='fixtures/actions/search_customers/output.json'
describe 'execute' do
subject(:output) { action.execute(settings, input) }
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')) }
context 'given valid input' do
it 'gives expected output' do
expect(output).to eq(expected_output)
end
end
end
# ステップ5 - RSpec テストの実行
最後のステップは、RSpec テストを実行することです。これは bundle exec rspec spec/actions/search_customers_spec.rb
コマンドで実行されます。
$ bundle exec rspec spec/actions/search_customers_spec.rb
actions/search_customers
execute
given valid input
gives expected output
sample_output
add some examples (PENDING: Not yet implemented)
input_fields
add some examples (PENDING: Not yet implemented)
output_fields
add some examples (PENDING: Not yet implemented)
Pending: (Failures listed here are expected and do not affect your suites status)
1) actions/search_customers sample_output add some examples
# Not yet implemented
# ./spec/actions/search_customers_spec.rb:28
2) actions/search_customers input_fields add some examples
# Not yet implemented
# ./spec/actions/search_customers_spec.rb:34
3) actions/search_customers output_fields add some examples
# Not yet implemented
# ./spec/actions/search_customers_spec.rb:40
Finished in 0.03218 seconds (files took 0.90373 seconds to load)
4 examples, 0 failures, 3 pending
Last updated: 2023/8/31 1:07:14