【问题标题】:Ruby on Rails: How can I test a route with rspec that has a unique ID in?Ruby on Rails:如何使用具有唯一 ID 的 rspec 测试路由?
【发布时间】:2012-11-07 12:24:12
【问题描述】:

我正在尝试这样做:

我的测试如下:

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 =&gt; user.id,但它引发了异常:

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

我还有什么遗漏的吗?

【问题讨论】:

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


    【解决方案1】:

    1) 确保您的测试文件有这样的块:

     describe UsersController do
       # your tests here
     end
    

    2) 尝试像这样重写get

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

    【讨论】:

    • @David Cowden - 这里的主要区别在于 UsersController 被传递给 describe 方法,因此示例组正确设置为向您的被测控制器发出 HTTP 请求。
    • @Hugo 谢谢。我认为这也有效。在您的描述块中指定UsersController 是否有优势?另外,get 是否优于 visit?似乎每个人都在建议get,但我发现visit 有效并且更简洁。
    【解决方案2】:

    试试这个

    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
    

    【讨论】:

      【解决方案3】:

      我最终这样做了:

      visit edit_user_path(user.id) 
      

      我不确定是否阅读了有关哪种方法(获取与访问)更受青睐的信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多