問題
注文画面から「決済方法を選択する」をクリックし、決済方法選択画面に各種支払方法(クレカ、PayPal、銀行振込)が
表示されているかを確認するためfeature specを作成しました。
ローカルでパスしたのでCIで確認したところ、このようなエラーがでました。
Capybara::Webkit::JavaScriptError:
{:line_number=>1, :message=>"IntegrationError: Please call Stripe() with your publishable key.
You used an empty string.", :source=>"https://js.stripe.com/v3/"}
エラーをみてみる
Please call Stripe() with your publishable key.
You used an empty string."
どうやらStripe()という関数?をpublishable keyと一緒に呼ばなければならないようです。
そもそもStripe()って何かわからなかったので、
公式ドキュメントをみたところ、発見しました。
https://stripe.com/docs/stripe-js/reference#stripe-function
やっぱり関数ですね。
そして Use Stripe(publishableKey[, options]) to create an instance of the Stripe object.
とあるように、publishable keyを引数に渡してインスタンスを作る関数のようです。
となると、このエラー文は
1. Stripe()が呼べていない
2. publishable keyが存在しない
ことを意味しているように思われます。
しかし
ローカルのENVにはしっかりとpublishable_keyが定義されていて、そちらもcredentialsで参照されています。
だからpublishable keyも存在するはず。そしてStripeMock
を使用しているので、Stripe()も呼ばれているはず。
謎は深まるばかりでした。
結論
CircleCIにはCircleCIの環境変数があります。
そこでpublishable keyが定義されていませんでした。
だから、CI上だけテストが落ちていました。
なので、新しく環境変数を定義してかつそれをテストで使用するような場合は
CircleCIの環境変数にも別途追加するようにしましょう、というお話でした。