RSpec:新用户视图测试失败,而它本应通过
RSpec: New User view test failing, when it should be passing
我有这个测试:
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
我必须在测试中更改什么才能通过?
我认为渲染视图时出现问题(可能是您没有设置 var,出现错误?)
像这样输入:
it 'renders new user form' do
render
puts subject
assert_select 'form[action=?][method=?]', users_path, 'post'
end
并检查那里有什么。
你可以在那里设置一个断点,而不是 puts subject
,然后在那里检查 subject
的内容,或者将它们保存在 html
文件中并在浏览器中打开进行检查.
问题是测试描述了一个 new
动作,但是在 before(:each)
块中,正在创建一个用户,因此触发了一个 edit
动作。
所以问题出在测试本身,而不是视图
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
我有这个测试:
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
我必须在测试中更改什么才能通过?
我认为渲染视图时出现问题(可能是您没有设置 var,出现错误?)
像这样输入:
it 'renders new user form' do
render
puts subject
assert_select 'form[action=?][method=?]', users_path, 'post'
end
并检查那里有什么。
你可以在那里设置一个断点,而不是 puts subject
,然后在那里检查 subject
的内容,或者将它们保存在 html
文件中并在浏览器中打开进行检查.
问题是测试描述了一个 new
动作,但是在 before(:each)
块中,正在创建一个用户,因此触发了一个 edit
动作。
所以问题出在测试本身,而不是视图
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