前提
Sinatra+RSpec3+Capybara で簡単なテストを書いてみた
describe 'App' do
before do
visit '/'
end
it do
expect(page).to have_content 'Hello, world'
end
end
これでrspecを走らせたところ以下のようなエラーが
Failure/Error: visit '/'
NoMethodError:
undefined method `visit' for #<RSpec::ExampleGroups::App::Nested1:0x007fc3f45531f0>
# ./spec/app_spec.rb:3:in `block (2 levels) in <top (required)>'
これ自体はmetadateの付け忘れでcapybaraを使う場合はdescribe
に type: :feature
が必要だという話だった
describe 'App', type: :feature do
# 中略
end
これはこれでいいんだけれど、ファイルが増えたら付け忘れが起きそうだしRailsの時はディレクトリに入れれば type
無しでいけた気がする…
RSpec::Core::Configuration#define_derived_metadata
みたいなことをツイートをしてたらリプライで教えていただいた
@chiastolite RSpec 3 以降であれば Configuration#define_derived_metadata を使って自前で定義できます。rspec-rails 3 も内部的にはこれを使っています。 https://t.co/QlBBUutRFF
— Yuji Nakayama (@nkym37) 2014, 6月 9
というわけで試してみた
今回は spec/features/ 以下のspecファイルにtype: :feature
をつける
RSpec.configure do |config|
config.define_derived_metadata(file_path: %r{/spec/features/}) do |metadata|
metadata[:type] ||= :feature
end
end
そして実行
$ rspec
.
Finished in 0.02655 seconds (files took 0.45621 seconds to load)
1 example, 0 failures
動いたーー
注意
このメソッド自体はRSpec3から入ったようなので、RSpec2では多分動きません