在(:all)过滤器中,rails路由未定义在rspec中?

时间:2011-08-04 21:27:22

标签: ruby-on-rails rspec routes capybara

我正在使用capybara和rspec设置一些集成测试。

在单个测试中,这有效:

describe "SIGN IN, POST post" do

  it "redirects to /posts after creating a new post" do
    visit new_artist_session_path
    fill_in 'Email', :with => 'vargas@vargas.com'
    fill_in 'Password', :with => 'password'
    click_link_or_button 'artist_submit'

    visit "/artists/vargas/posts"
    page.should have_content("Upload")
    click_button 'Upload'
    URI.parse(current_url).path.should == "/artists/vargas/posts"
  end
end    

但是,我想将“sign_in”部分移动到before(:all)过滤器块,以便我可以干掉我的测试。但是,似乎在before(:all)块中,相同的代码会出现此错误:

Failure/Error: visit new_artist_session_path
   NameError:
     undefined local variable or method `new_artist_session_path' for #<RSpec::Core::ExampleGroup::Nested_1:0x0000010399e388>

似乎路由url helper在before块中不可用?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

似乎路径助手只能在“it”和“do”之间使用。只是不在before(:all)方法中。所以我最终只创建了一个登录方法,并将其包含在需要它的每个测试中。