【问题标题】:Rails route not working using cucumber to testRails 路线无法使用黄瓜进行测试
【发布时间】:2017-11-26 03:44:21
【问题描述】:

[您好,这是我在 Stackoverflow 上的第一个问题,所以请多多包涵,我会尽量提供尽可能详细的信息。我是编码新手,目前正在开发一个 Rails 应用程序,我正在构建一个讨论板。到目前为止,我已经建立了我的用户模型和讨论模型,其中讨论属于_to user 和用户 has_many 讨论。我的测试在第 10 行失败,新讨论的链接似乎设置为正确的路线,当我窥探它时,它显示了正确的路径。然后在第 15 行,当前路径在索引页面上......所以我'我不确定我的测试是写得不好还是我错过了什么。我希望这与屏幕截图一起提供了足够的信息...我已经花了一天的时间来解决这个问题,但我已经束手无策了...非常感谢您的帮助。

error message rails routes

我的测试*

# A user starts a new discussion
Given("they click on the discussion link") do
click_link 'DISCUSSIONS'
end

Then("they will be redirected to the discussions index page") do
expect(current_path).to eq(user_discussions_path(@user.id))
end

   When("they click on the new discussion link") do
   click_link 'New Discussion'
   end

  Then("they will be redirected to the new discussion page") do
  expect(current_path).to eq(new_user_discussion_path(@user.id))
  end

讨论索引页*

<div class="container">
  <div class="grid">
   <%= render 'discussions_navbar' %>
   <%= link_to "New Discussion", new_user_discussion_path %>
  </div>
</div>

在 current_path 上从 test* 绑定 Pry

[1] pry(#<Cucumber::Rails::World>)> current_path
=> "/users/1715/discussions"
[2] pry(#<Cucumber::Rails::World>)> new_user_discussion_path(@user.id)
=> "/users/1715/discussions/new"
[3] pry(#<Cucumber::Rails::World>)> expect(current_path).to 
eq(new_user_discussion_path(@user.id))
RSpec::Expectations::ExpectationNotMetError:
expected: "/users/1715/discussions/new"
got: "/users/1715/discussions"

在新讨论链接上绑定撬动*

[1] pry(#<#<Class:0x007fd3a62cf660>>)> new_user_discussion_path
=> "/users/1722/discussions/new"

错误信息*

When they click on the new discussion link                 # features/step_definitions/discussion_steps.rb:10
      undefined method `discussions_path' for #<#<Class:0x007fd3a62cf660>:0x007fd3a6681740> (ActionView::Template::Error)
      ./app/views/discussions/_form.html.erb:1:in `_app_views_discussions__form_html_erb__787511772381390310_70273503263920'
      ./app/views/discussions/new.html.erb:4:in `_app_views_discussions_new_html_erb___371545055918840709_70273503334040'
      ./features/step_definitions/discussion_steps.rb:11:in `"they click on the new discussion link"'
      features/discussion.feature:10:in `When they click on the new discussion link'

新讨论表格*

<%= simple_form_for @discussion do |d| %>
  <%= d.input :title, label: "Discussion Title" %>
  <%= d.input :description %>
  <%= d.button :submit %>
<% end %>

路线*

user_discussions GET /users/:user_id/discussions(.:format) Discussion#index

POST /users/:user_id/discussions(.:format) 讨论#create 新用户讨论 GET /users/:user_id/discussions/new(.:format) Discussion#new

【问题讨论】:

  • 这看起来很简单——new_user_discussion_path 需要一个user_id 参数。您尚未在索引页面视图中提供它。
  • 我已经尝试过了,并且用户 ID 在路径范围内...查看我的 binding.pry... 1:
    2:
    3: 4: => 5: 6: 7:
    8: [1] 撬(#>)> new_user_discussion_path => "/users/1750/discussions/new" [2] 撬(#>)>跨度>

标签: ruby-on-rails forms routing controllers


【解决方案1】:

试试:

&lt;%= simple_form_for [current_user, @discussion] do |d| %&gt;

【讨论】:

  • 谢谢你的工作......我使用了实例变量@current_user,它工作了谢谢!!
  • 还有一个问题......所以它似乎正在保存到我的讨论表中,但现在我无法显示它......这是我从服务器得到的......处理方式DiscussionsController#create as HTML "discussion"=>{"title"=>"test", "description"=>"test123"}, "commit"=>"Save", "user_id"=>"1"} 用户加载(0.4ms) SELECT "users".* FROM "users" LIMIT $1 [["LIMIT", 1]] (0.3ms) BEGIN SQL (11.6ms) INSERT INTO "discussions" ("title", "description", " user_id", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5) RETURNING "id" ..但是没有讨论ID?
  • 这只是服务器中正在执行的 SQL 的回声。当您单击创建按钮时,它应该将您带回索引页面,不是吗?
  • 如果你的意思是现在你的讨论没有显示在任何地方,我在你的代码中看不到任何地方 - 在你的索引页面中,你有一个导航栏和一个指向表单的链接创建/编辑,但您不显示有关现有讨论的任何信息
猜你喜欢
  • 1970-01-01
  • 2017-04-20
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多