LoginSignup
24
23

More than 5 years have passed since last update.

Turnip で placeholder のマッチングを柔軟にする

Posted at

たとえば,以下のような step を定義した場合,

step "ユーザが「:entry」をユーザ欄に入力する" do |user_id|
  fill_in "user_id", :with => user_id
end

以下のような条件節は定義した step にマッチしません。

When ユーザが「hoge」をユーザ欄に入力する      # マッチする

When ユーザが「」をユーザ欄に入力する          # 空文字列はマッチしない
When ユーザが「foo bar」をユーザ欄に入力する   # 複数 words はマッチしない
When ユーザが「山田太郎」をユーザ欄に入力する  # 日本語はマッチしない

これは Turnip::Placeholder.default で定義されているデフォルトマッチャが次のようになっているから。

      def default
        @default ||= new(:default) do
          match %r((?:"([^"]*)"|'([^']*)'|([a-zA-Z0-9_-]+))) do |first, second, third|
            first or second or third
          end
        end
      end

なので,以下のように "' で囲うか,

# 囲ってあれば日本語だろうと空文字列だろうとマッチする
When ユーザが「""」をユーザ欄に入力する
When ユーザが「'foo bar'」をユーザ欄に入力する
When ユーザが「'山田太郎'」をユーザ欄に入力する

以下のようにカスタム placeholder を定義してみましょう。

placeholder :any do
  match /.*?/ do |any|
    any
  end
end

step "ユーザが「:any」をユーザ欄に入力する" do |user_id|
  fill_in "user_id", :with => user_id
end
# 囲わなくてもマッチする
When ユーザが「」をユーザ欄に入力する
When ユーザが「foo bar」をユーザ欄に入力する
When ユーザが「山田太郎」をユーザ欄に入力する
24
23
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
23