簡體   English   中英

Rails Rspec集成測試水豚

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM