当前位置: 首页 > 知识库问答 >
问题:

水豚看到空白页集成测试

焦正德
2023-03-14

我是写集成测试的新手,所以如果这个问题看起来很初级,请原谅(尽管我花了几个小时在网上寻找答案)。

我与Rails 4、RSpec和Capybara合作。

这是我的代码

RSpec.feature "Sign up" do
  it "has a working link to sign in page" do
    visit '/users/new'
    click_on("Sign in")
    expect(page).to have_content "Sign in to continue" <= the problem is here
  end
end

错误:

1) Sign up has a working link to sign in page
     Failure/Error: expect(page).to have_content "Sign in to continue"
       expected to find text "Sign in to continue" in ""

链接在浏览器中工作正常。我试着保存并打开这个页面,它确实显示了一个空白页面。我的所有RSpec单元测试都使用当前配置。控制器不能呈现我的页面吗?如果是,我如何修复它?我现在没有任何控制器测试。

谢谢你的建议!

我的等级库助手:

RSpec.configure do |config|
  config.expect_with :rspec do |expectations|
    expectations.include_chain_clauses_in_custom_matcher_descriptions = true
  end

  config.mock_with :rspec do |mocks|
    mocks.verify_partial_doubles = true
  end
end

我的rails助手:

require 'capybara/rspec'

# This file is copied to spec/ when you run 'rails generate     rspec:install'
ENV["RAILS_ENV"] ||= 'test'
require 'spec_helper'
require File.expand_path("../../config/environment", __FILE__)
require 'rspec/rails'

ActiveRecord::Migration.maintain_test_schema!

RSpec.configure do |config|
  config.fixture_path = "#{::Rails.root}/spec/fixtures"
  config.include FactoryGirl::Syntax::Methods
  config.use_transactional_fixtures = true
  config.infer_spec_type_from_file_location!
end

完整的视图:

<header class='header'>
  <div class='dog-logo'></div>
  <aside>
    <a class='blue-button' href='<%= new_session_url %>'>Sign in</a>
  </aside>
</header>

<h1 class='create-new-account-header-text'>Create your account!</h1>

<form class='create-account-form group' id='create-account-form'>
  <label>Name</label>
  <input type='text' for='Name' name='user[first_name]'
                     placeholder="First" class='sign-up-first-name'>

  <input type='text' for='Name' name='user[last_name]'
                     placeholder="Last" class='sign-up-last-name'>
  </label>

  <label>Choose your username</label>
  <input type='text' name='user[username]'
         for='Choose your username'>

  <label>Create a password</label>
  <input type='password' name='user[password]' class='sign-up-password'
         for='Create a password'>

  <label>Confirm your password</label>
  <input type='password' name='confirmPassword' class='sign-up-confirm-password'
         for='Confirm your password'>

  <label>Birthday</label>
  <select name='birthday-month' for='Birthday'>
    <option>January</option>
    <option>February</option>
    <option>March</option>
    <option>April</option>
    <option>May</option>
    <option>June</option>
    <option>July</option>
    <option>August</option>
    <option>September</option>
    <option>October</option>
    <option>November</option>
    <option>December</option>
  </select>
  <input name='birthday-day' type='text' placeholder="Day"     for='Birthday'>
  <input name='birthday-year' type='text' placeholder="Year" for='Birthday'>

  <label>Gender</label>
  <select name="user[gender]" for='Gender'>
    <option value="" disabled selected style='display:none;'>I am</option>
    <option value='M'>Male</option>
    <option value='F'>Female</option>
    <option value='O'>Other</option>
  </select>

  <input type='checkbox' for='I agree to be awesome!'
         class='sign-up-checkbox'>
  <label class='sign-up-awesome-label'>I agree to be awesome!</label>

  <button class='blue-button'>Create account</button>
</form>

用户控制器:

class UsersController < ApplicationController
  before_action :redirect_current_user

  def new
    render :new
  end
end

SessionsController:

class SessionsController < ApplicationController
  before_action :require_user!, only: [:destroy]
  before_action :redirect_current_user, only: [:new]

  def new
    render :new
  end

  def destroy
    current_user.reset_session_token!
    session[:session_token] = nil
    redirect_to new_session_url
  end
end

应用程序控制器:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  helper_method :current_user, :logged_in?

  def current_user
    @current_user ||= User.find_by(session_token:     session[:session_token])
  end


  def logged_in?
    !!current_user
  end

  def log_in!(user)
    user.reset_session_token!
    session[:session_token] = user.session_token
  end

  def log_out!
    current_user.reset_session_token!
    session[:session_token] = nil
  end

  def require_user!
    redirect_to new_session_url unless logged_in?
  end

  def redirect_current_user
    redirect_to root_url if current_user
  end
end

共有1个答案

何骞尧
2023-03-14

断然的:

正如@dwenzel在评论中正确指出的那样,应该在点击后出现的内容完全由Javascript呈现。

使用Capybara时,默认设置是页面上的Javascript不会运行。通过安装capybara webkit(有关更多信息,请参阅capybara webkit github)并包括该线路,问题得以解决

Capybara.javascript_driver = :webkit

在我的spec_助手中。rb。注意,在定义示例组时,您需要通过编写JS:true明确地告诉RSpec测试涉及JS,如下所示:

RSpec.feature "Sign up", js: true do
  ...
  // your test examples here
  ...
end
 类似资料:
  • 我是cucumber和水豚的新手,我对以下错误感到困惑: 在我的功能中,我有: 我的步骤如下所示: 我尝试了“click(button\u text)和click\u link”方法。我想这可能是我没有看到的明显的东西。我试图找到按钮元素的css定位器,然后单击该元素。我认为regex不需要更改,因为我正在更改“button\u text”局部变量的内容。还是我?

  • 有时它们会通过。 下面是演示这个问题的设置、代码和输出。 克服这个问题的建议将非常感谢,我相信这将帮助许多其他人,所以请评论! Rails 3.2 RSpec 2。x 水豚 恶鬼 幻影 AngularJS 谷歌浏览器47.0.2526.106版(64位) > 确保我使用水豚的等待DSL匹配器 确保正确设置了“我的数据库清理器” 测试每个页面项目,假设它可能不在页面上并且仍在加载 缩小不一致测试的范

  • 我正在根据一个主要开发人员的请求编写一个自动化测试。 正在开发的网页的一部分是允许用户提取数据的csv。在过去,CSV中的报头排序存在许多缺陷。 我需要打开csv,将头转换成一个数组,并与我创建的预期头的数组进行比较。 我已经读过Ruby2.0中的CSV文档,但我对Ruby还是个新手,我正在努力弄明白这一切的意义。 因此,期望csv中的第一个头eql我自己的数组中的第一个头。 我如何将csv文件头

  • 在我的Rails项目中,我通常使用在我的应用程序中构建/创建用户。我想知道在使用Cucumber, Capybara时是否可以使用来测试用户与我的应用程序的交互。没有数据库可以保存它们,我只是想存储它们的凭据 我可以有很多用户希望为每个用户创建工厂(除非有更好的Cucumber方法)。 在我的支持文件夹中,我可以创建一个Factorys文件夹,然后创建一个。保存每个用户的rb文件。 在我的文件中,

  • 将firefox更新到48版,但它给出了以下错误。任何帮助如何解决它: Selenium::WebDriver::错误::WebDriver错误:无法在60秒内从/library/ruby/gems/2.0.0/gems/selenium-webdriver-2.52.0/lib/selenium/webdriver/firefox/launcher获得稳定的firefox连接(127.0.0.1

  • 我一直在尝试使用selenium完成输入框,但在单击添加新客户按钮后总是找不到该输入框,它总是显示一个空白的白页。我通过chrome和fire fox@Test public val AddTouch()抛出中断异常{