私はrspecの統合テストを書いていますが、リンクをクリックすると正しいモデルページに移動することをテストしたいと思います。具体的には、同じ名前で異なるURLのリンクのリストでこれをテストしたいと思います。特定のリンクをhrefで選択する
これまでに学んだことは、特定のテキストまたはDOM IDのみを検索するため、click_linkでCSS属性セレクタを使用することはできません。代わりに私はwebrat within
メソッドを使用しようとしていますが、一度リンクを選択するとどのようにクリックしますか?私は、リンクの範囲内link.click
が働くと考えましたが、それは方法click
が定義されていないと言って失敗します。
Failure/Error: link.click
NoMethodError:
undefined method `click' for #<Webrat::Scope:0x0000010505ae00>
ここに私のテストです:
require 'spec_helper'
describe "BrandLinks" do
before(:each) do
@base_title = "My App - "
@brand = Factory(:brand)
second = Factory(:brand) # <= Same name, different slug
third = Factory(:brand, :name => "Awesome USA Brand!!")
@brands = [@brand, second, third]
end
it "should show me the brand page when I click on a brand link" do
get '/brands'
within "a[href=#{brand_path(@brand)}]" do |link|
link.click
end
response.should be_success
response.should have_selector(
"title",
:content => "#{@base_title}Brand - #{@brand.name}"
)
end
end
ここで一見明らかなのは、リンクの親ノードを選択できるように、セレクタをページに追加するだけです。この時点で私がこれをやろうとしたら、この1つのテストに合格するためにセレクタをページに追加するだけです。私はそれを避けたい。 –
同僚は私の前のコメントについて次のように言っていました。「[いつ]コードをテストするのは簡単ですが、しばしばアーキテクチャが一貫して切り離されているという兆候です。純粋にテスト容易性のためにコードを変更/リファクタリングしました。実際にコードを複雑にした場合は、これを行うことにはもっと注意が必要ですが、idをhtml要素に追加すると、技術的な負債が増えることはありません。それがコードをよりテスト可能にするなら、私はそれを求めて行くだろう。その要素がそこにあることをテストするのに十分な重要性を持っているならば、それをIDやクラスに与えることは大丈夫でしょう。」と言われました –
しかし、私はまだ私が試みていることが可能かどうかを知りたいと思います。 –