たとえば,以下のような 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 ユーザが「山田太郎」をユーザ欄に入力する