Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 测试视图编辑表单时Rspec失败_Ruby On Rails_Ruby_Ruby On Rails 4_Testing_Rspec - Fatal编程技术网

Ruby on rails 测试视图编辑表单时Rspec失败

Ruby on rails 测试视图编辑表单时Rspec失败,ruby-on-rails,ruby,ruby-on-rails-4,testing,rspec,Ruby On Rails,Ruby,Ruby On Rails 4,Testing,Rspec,我正在开发我的第一个rails应用程序,其中两个生成的测试未通过: Failures: 1) gardens/edit renders the edit garden form Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]" Minitest::Assertion: Expected at least 1 element matching "inputgard

我正在开发我的第一个rails应用程序,其中两个生成的测试未通过:

Failures:

  1) gardens/edit renders the edit garden form
     Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]"

     Minitest::Assertion:
       Expected at least 1 element matching "inputgarden_name[name="garden[name]"]", found 0..
       Expected 0 to be >= 1.
     # ./spec/views/gardens/edit.html.haml_spec.rb:20:in `block (3 levels) in <top (required)>'
     # ./spec/views/gardens/edit.html.haml_spec.rb:18:in `block (2 levels) in <top (required)>'

  2) gardens/new renders new garden form
     Failure/Error: assert_select "inputgarden_name[name=?]", "garden[name]"

     Minitest::Assertion:
       Expected at least 1 element matching "inputgarden_name[name="garden[name]"]", found 0..
       Expected 0 to be >= 1.
     # ./spec/views/gardens/new.html.haml_spec.rb:19:in `block (3 levels) in <top (required)>'
     # ./spec/views/gardens/new.html.haml_spec.rb:17:in `block (2 levels) in <top (required)>'

Finished in 1.15 seconds (files took 2.74 seconds to load)
34 examples, 2 failures, 17 pending

Failed examples:

rspec ./spec/views/gardens/edit.html.haml_spec.rb:15 # gardens/edit renders the edit garden form
rspec ./spec/views/gardens/new.html.haml_spec.rb:14 # gardens/new renders new garden form
我该怎么做才能通过这些测试

编辑:这是编辑视图

/app/views/gardens/edit.html.haml:

/app/views/gardens/_form.html.haml:


包含的错误消息表示找不到给定匹配器的html元素

对于关联,默认情况下,简单表单gem生成select元素而不是input元素

您需要将最后一个断言更改为: 断言\选择选择garden \用户\ id[名称=?],garden[用户\ id]


我猜新视图的规范中出现了问题?

您试图规范的视图是什么样子的?我不知道你说的路径不包含ID。是的,你能提供更多信息吗?令我惊讶的是,对于两个不同的测试,它给出了同一位置第17行和第27行的错误。是不是在你的测试之前出了问题。。。结束了吗?@Axe:老实说,我在这里迷路了;这是我第一次使用rspec,我只是想弄清楚如何使生成的测试通过。这也是我的第一个rails应用程序,所以我可能在不知情的情况下从那条黄金之路上摔了下来。另外,我刚刚更新了我的帖子,我相信这些行号与另一个新行略有不同。@DaveNewton:我不确定这些测试应该是什么样子。我希望RSpec.descripe gardens/edit更像RSpec.descripe gardens/:id/edit之类的东西。不过我觉得这是不必要的。如果这是一个明显的问题,很抱歉,但是您是否检查了您的HTML视图以获得您正在测试的正确ID和选择器属性?做得好;尤其是在没有看到标记的情况下:是的,它是在寻找输入字段而不是选择字段。谢谢,我有几件事刚刚准备就绪。
  1 require 'rails_helper'
  2
  3
  4 RSpec.describe "gardens/edit", type: :view do
  5   before(:each) do
  6     @garden = assign(:garden, Garden.create!(
  7       :name => "MyString",
  8       :square_feet => 1,
  9       :zone => 1,
 10       :garden_type => "MyString",
 11       :user => nil
 12     ))
 13   end
 14
 15   it "renders the edit garden form" do
 16     render
 17
 18      assert_select "form[action=?][method=?]", garden_path(@garden), "post" do
 19 
 20        assert_select "input#garden_name[name=?]", "garden[name]"
 21 
 22        assert_select "input#garden_square_feet[name=?]", "garden[square_feet]"
 23 
 24        assert_select "input#garden_zone[name=?]", "garden[zone]"
 25 
 26        assert_select "input#garden_garden_type[name=?]", "garden[garden_type]"
 27 
 28        assert_select "input#garden_user_id[name=?]", "garden[user_id]"
 29      end
 30   end
 31 end
%h1 Editing garden

= render 'form'

= link_to 'Show', @garden
\|
= link_to 'Back', gardens_path
= simple_form_for(@garden) do |f|
  = f.error_notification

  .form-inputs
    = f.input :name
    = f.input :square_feet
    = f.input :zone
    = f.input :garden_type
    = f.association :user

  .form-actions
    = f.button :submit