如何在整个示例组中使用实例变量,即使它在示例之外?

时间:2012-04-06 20:08:53

标签: ruby-on-rails ruby ruby-on-rails-3 testing rspec

我正在使用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

1 个答案:

答案 0 :(得分:1)

您不需要访问其中一个RSpec设置,拆卸或测试块之外的实例变量。如果您需要修改测试的主题,您可能想要创建一个明确的主题,然后使用之前访问它:

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