ここには 2 つの小さな問題があります。最初にlet構文を使用して、rspec 内でメモ化された変数を定義します。次に、ハッシュを作成するときに*_pathヘルパーを囲む括弧を削除します。
そのため、次のように述べています。
lol = Hash[ 'Profile' => 'user_path(user)',
'Sign out' => 'signin_path']
持ってる:
let(:lol) { Hash[ 'Profile' => user_path(user),
'Sign out' => signin_path] }
説明ブロックは次のようになります。
describe "with valid information" do
let(:lol) { Hash[ 'Profile' => user_path(user),
'Sign out' => signin_path] }
it { should have_list_of_links(lol) }
end
副作用として、小さな例を示します。$PROJECT/spec/support/utilities.rbファイルでマッチャーが定義されている場合、アプリケーション ルートなどが正しく設定され、ビューにリンクが表示されます。
describe "Users pages" do
before { visit root_path }
let(:values) { Hash['Index' => users_path,
'Sign out' => signout_path,
'Sign in' => signin_path] }
subject { page }
describe "with valid informations" do
it { should have_list_of_links(values) }
end
end
rspec の実行:
> rspec
.
Finished in 0.00267 seconds
1 example, 0 failures
Randomized with seed 67346
rspec -f ドキュメントの実行
>rspec -f documentation
Users pages
with valid informations
should have link "Sign in"
Finished in 0.00049 seconds
1 example, 0 failures
Randomized with seed 53331
これは明確ではなく、誤解を招く可能性があります。特にドキュメンテーション スイッチです。新しいアプリケーションで rspec -f ドキュメントを実行するのが一般的な方法です (rspec ofc を使用している場合)。何が起こっているのかをよりよく理解するために。
代わりに次の場合:
describe "Users pages" do
before { visit root_path }
subject { page }
describe "with valid informations" do
it { should have_link('Index', href: users_path) }
it { should have_link('Sign out', href: signout_path) }
it { should have_link('Sign in', href: signout_path) }
end
end
rspec の実行:
>rspec
...
Finished in 0.0097 seconds
3 examples, 0 failures
Randomized with seed 53347
rspec -f ドキュメントの実行
>rspec -f documentation
Users pages
with valid informations
should have link "Index"
should have link "Sign out"
should have link "Sign in"
Finished in 0.00542 seconds
3 examples, 0 failures
Randomized with seed 40120
個人的には 2 番目のケース (より冗長なケース) が好きです。テストの数が増え、テスト構造がより複雑になると、その価値が高まります。rspec -f documentationを実行するだけで、ユーザー マニュアルやチュートリアルに行かなくても、アプリケーションの使用方法を学ぶことができます。