RSpec:新用户视图测试失败,该测试应通过

RSpec:新用户视图测试失败,该测试应通过,rspec,rspec-rails,Rspec,Rspec Rails,我对这次考试有信心: require 'rails_helper' require 'support/factory_girl' RSpec.describe 'users/new', type: :view do before(:each) do assign(:user, create(:user)) end it 'renders new user form' do render assert_select 'fo

我对这次考试有信心:

require 'rails_helper'
require 'support/factory_girl'

RSpec.describe 'users/new', type: :view do
    before(:each) do
        assign(:user, create(:user))
    end

    it 'renders new user form' do
        render
        assert_select 'form[action=?][method=?]', users_path, 'post'
    end
end
这一页,表格在这张图的第二行:

此测试失败,因为未找到任何表单

rspec spec/views/users/new.html.erb_spec.rb

users/new
  renders new user form (FAILED - 1)

Failures:

  1) users/new renders new user form
     Failure/Error: assert_select 'form[action=?][method=?]', users_path, 'post'

     Minitest::Assertion:
       Expected at least 1 element matching "form[action="/users"][method="post"]", found 0..
       Expected 0 to be >= 1.
     # /home/ramses/.rvm/gems/ruby-2.4.0@gym-app/gems/minitest-5.10.3/lib/minitest/assertions.rb:139:in `assert'
     # /home/ramses/.rvm/gems/ruby-2.4.0@gym-app/gems/minitest-5.10.3/lib/minitest/assertions.rb:270:in `assert_operator'
     # /home/ramses/.rvm/gems/ruby-2.4.0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector_assertions.rb:277:in `assert_size_match!'
     # /home/ramses/.rvm/gems/ruby-2.4.0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector_assertions.rb:172:in `block in assert_select'
     # /home/ramses/.rvm/gems/ruby-2.4.0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector_assertions.rb:171:in `tap'
     # /home/ramses/.rvm/gems/ruby-2.4.0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector_assertions.rb:171:in `assert_select'
     # ./spec/views/users/new.html.erb_spec.rb:11:in `block (2 levels) in <top (required)>'

Finished in 0.24509 seconds (files took 2.93 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/views/users/new.html.erb_spec.rb:9 # users/new renders new user form
rspec spec/views/users/new.html.erb_spec.rb
用户/新
呈现新用户表单(失败-1)
失败:
1) 用户/new呈现新的用户表单
失败/错误:断言\u选择'form[action=?][method=?',用户\u路径,'post'
Minitest::断言:
应至少有1个元素与“form[action=“/users”][method=“post”]”匹配,找到0。。
预期0大于等于1。
#/home/ramses/.rvm/gems/ruby-2.4。0@gym-app/gems/minitest-5.10.3/lib/minitest/assertions.rb:139:in'assert'
#/home/ramses/.rvm/gems/ruby-2.4。0@gym-app/gems/minitest-5.10.3/lib/minitest/assertions.rb:270:in'assert_operator'
#/home/ramses/.rvm/gems/ruby-2.4。0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector\u assertions.rb:277:in'assert\u size\u match!'
#/home/ramses/.rvm/gems/ruby-2.4。0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector\u assertions.rb:172:in'block in assert\u select'
#/home/ramses/.rvm/gems/ruby-2.4。0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector_assertions.rb:171:in'tap'
#/home/ramses/.rvm/gems/ruby-2.4。0@gym-app/gems/rails-dom-testing-2.0.3/lib/rails/dom/testing/assertions/selector\u assertions.rb:171:in'assert\u select'
#./spec/views/users/new.html.erb_spec.rb:11:in'block(2层)in'
完成时间为0.24509秒(加载文件需要2.93秒)
1例,1例失败
失败的示例:
rspec./spec/views/users/new.html.erb#u spec.rb:9#users/new呈现新用户表单

我必须在测试中更改什么才能使其通过?

我认为呈现视图时出现问题(可能您没有设置变量,并且出现错误?)

这样说:

it 'renders new user form' do
    render
    puts subject
    assert_select 'form[action=?][method=?]', users_path, 'post'
end
检查那里有什么


您可以在此处设置断点,检查
主题
的内容,或者将其保存在
html
文件中并在浏览器中打开以供检查,而不是
放置主题

问题在于测试描述的是一个
新的
操作,但是在
before(:each)
块中,正在创建一个用户,从而触发一个
编辑
操作

因此,问题在于测试本身,而不是在视图中

require 'rails_helper'
require 'support/factory_girl'

RSpec.describe 'users/new', type: :view do
    before(:each) do
        #use build instead of create, to pass a non-saved user
        assign(:user, build(:user))
    end

    it 'renders new user form' do
        render
        # you can use byebug to inspect variables.
        # byebug
        # I figured this out by inspecting the contents of the rendered var
        #inside byebug, use var to show all variables in context
        assert_select 'form[action=?][method=?]', users_path, 'post'
    end
end

根据你的建议,我能把它弄明白;请参阅我的答案以获得解决方案。我使用了
byebug
而不是
put subject
,并输入了
rendered
变量