23

コントローラーとモデルの仕様を作成していますが、ヘルパー仕様を作成したことはありません。どこから始めたらいいのかわからない。

私は次のスニペットを持っていますapplication_helper.rb

  def title(page_title)
    content_for(:title) { page_title }
  end
  • コードにヘルパー仕様をどのように書くべきですか?
  • また、優れたヘルパーテスト/仕様を示すオープンソースのRailsアプリがある場合は、私に知らせてください。
4

5 に答える 5

21

ヘルパー仕様のrspec-railsドキュメントから:

ヘルパーの仕様はspec/helpersにあり、ActionView :: TestCase::Behaviorに混在しています。

ApplicationHelper(存在する場合)とともに、指定されているヘルパーモジュールを混合するヘルパーオブジェクトを提供します。

require 'spec_helper'
describe ApplicationHelper do
  describe "#title" do
    it "displays the title" do
      # helper is an instance of ActionView::Base configured with the
      # ApplicationHelper and all of Rails' built-in helpers
      expect(helper.title).to match /Some Title/
    end
  end 
end
于 2012-10-11T18:57:57.510 に答える
11

ヘルパーを指定するときにこの構文を使用することができます

これがあなたのヘルパーだとしましょう

module ApplicationHelper
  def page_title
    @title || nil
  end
end

次に、この構文で指定できます

require "spec_helper"

describe ApplicationHelper do
  describe "#page_title" do
    it "returns the instance variable" do
      assign(:title, "My Title")
      helper.page_title.should eql("My Title")
    end
  end
end
于 2011-11-24T13:54:12.607 に答える
10

次のように、ヘルパーをテストクラスに含めることもできます。

 describe ApplicationHelper do
   helper ApplicationHelper

   it "should work" do
     my_helper_method("xyz").should == "result for xyz"
   end
 end

Rails3で私のために働いた。

于 2011-02-07T08:28:47.543 に答える
7

RSpecは、クラスとモジュールを「説明」するときにRails環境から自動的にロードする必要があるため、有効なヘルパー仕様は次のようになります。

#deleted

ただし、bddはすべてのメソッドをテストするのではなく、アプリケーションの動作をテストすることを忘れないでください。

編集:

@Kenが言ったように、私の仕様は正しくありませんでした。それは間違いなく間違った方法でした。そこで、ヘルパー仕様よりも気に入っているリクエスト仕様ソリューションを思いつきました。

# inside your helper
def title=(page_title)
  content_for(:title) { page_title }
end

# views/resource/index.html.erb
<% title = "foo" %>

# views/layouts/application.html.erb
<%= yield :title %>

# request spec
require 'spec_helper'

describe YourResource do
  it "should output content for title"
    get "/resource"
    response.body.should =~ /<title>foo<\/title>/
  end
end

それ以外の場合、ヘルパーの動作のみをテストする場合(重要であるため、またはビューがないため)、@Kenのソリューションの方が適しています。

于 2010-01-03T23:49:31.990 に答える
1

正規表現を使用してhtmlを解析することは、実際に車輪の再発明です。それは私にとってはあまりにも多くの仕事です。柔軟性がなく、エラーが発生しやすいのです。(推論については、この皮肉でありながら陽気で正確なSOの回答を参照してください)

ヘルパーによるhtml出力を解析する必要がある場合は、gemrspec-html-matchersを試してみてください。webratとは異なり、RSpec3でうまく機能するようです。

次に、次のことができます。

expect(helper.title).to have_tag('title', text: 'What you expect')
于 2015-07-17T15:05:47.480 に答える