0

Ruby on Rails 3.2.2 と rspec-rails-2.8.1 を使用しています。before例の外にある場合でも、例グループ全体で(フックで初期化された) インスタンス変数を使用したいと考えています。つまり、次のようにしたいと思います。

describe "..." do
  before(:each) do
    @user = User.create(...)
  end

  # Here I would like to use the instance variable but I get the error:
  # "undefined method `firstname' for nil:NilClass (NoMethodError)"
  @user.firstname

  it "..." do
    # Here it works.
    @user.firstname
    ...
  end
end

出来ますか?もしそうなら、どのように?


:実行するテストに関する詳細情報を次のように出力しようとしているため、これを行いたいと思います。

# file_name.html.erb
...

# General idea
expected_value = ...

it "... #{expected_value}" do
  ...
end

# Usage that i am trying to implement
expected_page_title =
  I18n.translate(
    'page_title_html'
    :user => @user.firstname # Here is the instance variable that is called and that is causing me problems
  )

it "displays the #{expected_page_title} page title" do
  view.content_for(:page_title).should have_content(expected_page_title)
end
4

1 に答える 1

1

RSpec の setup、teardown、または test ブロックのいずれかの外でインスタンス変数にアクセスする必要はありません。テストのサブジェクトを変更する必要がある場合は、明示的なサブジェクトを作成し、 before を使用してアクセスすることができます。

describe "..." do
  subject { User.create(... }

  before(:each) do
    subject.firstname #whatever you plan on doing
  end

  it "..." do
    # Here it works.
    subject.firstname
    ...
  end
end
于 2012-04-06T20:23:04.090 に答える