我在這裏可以看到兩個小問題。首先使用let語法在rspec中定義memoized變量。其次,當你建立你的散列時,請在括號裏面加上* _path助手。
所以insted的:
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
我個人比較喜歡第二種情況(更詳細的一個)。隨着測試數量的增長以及測試結構變得越來越複雜,其價值越來越高。您可以簡單地運行rspec -f文檔以瞭解如何使用應用程序,而無需使用用戶手冊/教程。
你是什麼意思**我知道這是不應該做的方式**通過看它應該工作,做你所期望的代碼。你有任何錯誤?我可以看到的唯一副作用是所有鏈接都將在單個示例中運行,並且可能不適用於文檔。 – Kocur4d 2013-03-20 02:52:50
其實我不知道這是否是做了正確的方式,這更是我想說的... – jon 2013-03-20 08:56:11
我有一個錯誤信息,我只好等到工作日複製的結束/粘貼這裏。如果我明白你提到的副作用,我不確定。你會不會推薦這種實施測試的方式?但無論如何,最終我的目標只是練習一些不在tuto中編寫的代碼。 – jon 2013-03-20 09:03:05