4

rspec や capybara などを始めたばかりで、Rails でテスト駆動開発を行いたいと考えています。

私が取り組んでいる仕様には、ヘッダーとフッターの外観に関する非常に正確な定義があり、これらは学習を開始するのに適した場所であると考えています。

フッターについては、次のルールが必要です。

ユーザーがログインしている場合、ヘッダーにはロゴ画像のみが含まれます。ロゴ画像は、ユーザーのランディング ページへのリンクである必要があります。これは、ユーザーが持つ権利によって決まります。ユーザーがログインしていない場合、画像はリンクではなく、他の 4 つのリンクもフッターの表に表示されます。

これをコード化することは実際にはerbでかなり簡単ですが、私は正しいことをしようとしており、ここで一連のテストを行います。私の問題は、画像が画面に表示されているかどうかをテストできないように見えることです。rspec の本を読みましたが、「assets ディレクトリにあるこの画像を示しています」などと書かれている場所がわかりません。

私のセットアップは、views/layouts ディレクトリで、_header.html.erb _footer.html.erb _shim.html.erb application.html.erb です。

次のようなものを使用して、フッター部分を直接テストできると思います。

require "spec_helper"

describe "rendering views/layouts/_footer.html.erb" do
  #from https://www.relishapp.com/rspec/rspec-rails/v/2-8/docs/view-specs/view-spec
  it "shows the logo" do
    render :template => "layouts/_footer.html.erb"
    rendered.should =~ "/images/mainlogo.png"
  end

describe "rendering views/layouts/_footer.html.erb as admin" do
  before do
    FactoryGirl.create(:admin_user)
  end 
  it "links to landing from the logo"
    render :template => "layouts/_footer.html.erb"
    rendered.should contain("link/to/admin/landing")
  end
end
#repeat landing tests for various user types

そして、他のページでは、次のようなものを使用してフッター自体の存在を簡単にテストできます

  it should contain("footer")

私の問題は、画像が表示されているかどうかを確認するために地面から降りることさえできないことです。画像がアセットディレクトリ内の正しいものと一致するかどうかはなおさらです。私はここで何をすべきですか?

画像の存在をテストするための上記のコード (最初の記述/ブロックのみであり、「管理者として」または「含まれている必要があります」のものではありません) は、次の警告とエラーを与えます:

DEPRECATION WARNING: Passing a template handler in the template name is deprecated.

TypeError:
   type mismatch: String given

1 つ目はおそらく、私が理解できない構文を使用しているためですが、2 つ目は、アセットではなく文字列との比較であることを示唆しているようです。画像を比較する構文は何ですか? ありますか?

4

1 に答える 1

3

タイプの不一致エラーは=~、正規表現マッチャーである文字列を渡しているためです。文字列を正規表現に変更するか、include代わりに を使用できます。読みやすいという理由だけで行きincludeます:

rendered.should include("/images/mainlogo.png")

非推奨の警告を取り除くには.erb、テンプレート名から を削除します。

render :template => "layouts/_footer.html"
于 2013-01-31T07:53:46.767 に答える