[英]Rails Rspec IntegrationTest Capybara
我已经开始通过Rspec(水豚)测试我的应用程序。 这就是我的做法:
require 'rails_helper'
RSpec.describe "Homepages", type: :request do
describe "GET / without login" , js: true do
before(:all) do
Employee.create(username: "username", password: "12345", password_confirmation: "12345")
end
it "works!" do
visit root_path
fill_in "loginname", with: "username"
fill_in "password", with: "12345"
click_button('sign_in')
end
end
end
由于env即“ TEST-ENV”,因此我必须首先创建一个雇员。 问题是,如果我运行“ rake spec:requests”,则会收到以下错误消息:
1) Homepages GET / without login works!
Got 0 failures and 2 other errors:
1.1) Failure/Error:
def initialize(template, original_exception)
super(original_exception.message)
@template, @original_exception = template, original_exception
@sub_templates = nil
set_backtrace(original_exception.backtrace)
end
ArgumentError:
wrong number of arguments (1 for 2)
#/.rvm/gems/ruby-2.1.1/gems/actionview-4.2.7/lib/action_view/template/error.rb:64:in `initialize'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/session.rb:128:in `exception'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/session.rb:128:in `raise'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/session.rb:128:in `rescue in raise_server_error!'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/session.rb:125:in `raise_server_error!'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/session.rb:113:in `reset!'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara.rb:334:in `block in reset_sessions!'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara.rb:334:in `reverse_each'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara.rb:334:in `reset_sessions!'
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/rspec.rb:21:in `block (2 levels) in <top (required)>'
# ------------------
# --- Caused by: ---
# Capybara::CapybaraError:
# Your application server raised an error - It has been raised in your test code because Capybara.raise_server_errors == true
# /.rvm/gems/ruby-2.1.1/gems/capybara-2.10.1/lib/capybara/session.rb:126:in `raise_server_error!'
我不确定,但我认为类型=功能更好
样品
require "rails_helper"
RSpec.feature "Homepages", type: :feature do
before do
Employee.create(username: "username", password: "12345", password_confirmation: "12345")
end
context "GET / without login" do
scenario "works!", js: true do
visit root_path
fill_in "loginname", with: "username"
fill_in "password", with: "12345"
click_button('sign_in')
end
end
end
请通过inspect元素确保您输入的名称正确,以获取输入名称
我认为
fill_in "loginname", with: "username"
也许是
fill_in "user[loginname]", with: "username"
正如其他人所述,水豚测试应该是“功能”类型而不是“请求”类型,但这不是造成错误的主要原因。 您的应用代码在模板渲染期间引发了异常,然后您遇到了当前版本的Capybara中的一个错误,该错误正在处理其初始化程序采用多个参数的异常。 只要您不使用jRuby,就可以将Capybara版本锁定为2.10.0,并且应该看到应用程序引发的正确错误。 如果您使用的是jRuby,或者您不想锁定到较旧的版本,则可以指定使用Capybara的master分支
gem 'capybara', github: 'teamcapybara/capybara'
已修复的错误。
附带说明一下,当您实际上不使用capybara-webkit驱动程序时(因为它目前仅支持Capybara 2.7.1),您已经用capybara-webkit标记了这个问题,因此您可能需要更改标记到水豚。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.