Ruby on Rails:如何使用具有唯一ID的rspec测试路由?

时间:2012-11-06 09:02:36

标签: routes ruby-on-rails-3.2 rspec2

我正在尝试这样做:

我的测试如下:

describe "User pages" do

subject { page }

describe "edit" do
  let(:user) { FactoryGirl.create(:user) }
  before do
    log_in user 
    #visit edit_user_path(user) <-- did not work
  end

describe "page" do
  it "should render edit page" do
    get :edit, :id => user.id
    should have_selector('h1',    text: "Update")
    should have_selector('h2',    text: user.username)
    should have_selector('title', text: "Edit user")
  end
end

describe "with invalid information" do
  before { click_button "Save changes" }
  it { should have_content('error') }
end

我尝试添加get :edit, :id => user.id,但它会引发异常:

Failure/Error: get :edit, :id => user.id
 ArgumentError:
   bad argument (expected URI object or URI string)

还有其他我想念的东西吗?

3 个答案:

答案 0 :(得分:1)

1)确保您的测试文件包含如下块:

 describe UsersController do
   # your tests here
 end

2)尝试重写像这样的

 it "should render edit page" do
    get :edit, :id => user.to_param
    should have_selector('h1',    text: "Update")
    # ...
 end

答案 1 :(得分:0)

试试这个

describe "page" do
  it "should render edit page" do
    p = FactoryGirl.create(:user)
    get :edit, :id => p.id
    should have_selector('h1',    text: "Update")
    should have_selector('h2',    text: user.username)
    should have_selector('title', text: "Edit user")
  end
end

答案 2 :(得分:0)

我最终这样做了:

visit edit_user_path(user.id) 

我不确定阅读有关事情的方法,但首选哪种方法(get vs visit)。