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

水豚不与工厂女孩合作

吴正祥
2023-03-14

我正在使用factory girl和capybara的minitest进行集成测试。当我不使用factory girl创建用户对象时,Capybara工作正常,如下所示:

it "logs in a user successfully" do
    visit signup_path
    fill_in "Email", :with => "joey@ramones.com"
    fill_in "Password", :with => "rockawaybeach"
    fill_in "Password confirmation", :with => "rockawaybeach"
    click_button "Create User"
    current_path == "/"
    page.text.must_include "Signed up!"
    visit login_path
    fill_in "Email", :with => "joey@ramones.com"
    fill_in "Password", :with => "rockawaybeach"
    check "Remember me"
    click_button "Log in"
    current_path == "/dashboard"
    page.text.must_include "Logged in!"
    page.text.must_include "Your Dashboard"
  end

但是一旦我尝试用工厂女孩创建一个用户,奇怪的事情就开始发生,比如访问方法和click_button方法停止工作。例如,这个测试似乎没有任何问题:

require "test_helper"

describe "Password resets" do
  before(:each) do
    @user = FactoryGirl.create(:user)
  end

  it "emails user when requesting password reset" do
    visit login_path
    click_link "password"
    fill_in "Email", :with => user.email
    click_button "Reset my password"
  end

end

这是我的factories.rb:

FactoryGirl.define do
  factory :user do |f|
    f.sequence(:email) { |n| "foo#{n}@example.com" }
    f.password "secret"
    f.password_confirmation "secret"
  end
end

下面是我得到的实际错误:

est_0001_emails user when requesting password reset      0:00:01.624 ERROR
        undefined local variable or method `login_path' for #<#<Class:0x007fc2db48d820>:0x007fc2df337e40>

但是,如果我删除了user=FactoryGirl,那么访问登录路径就可以了。创建(:user)

这是水豚的虫子吗?还是我做错了什么?

共有2个答案

邵华皓
2023-03-14

删除登录路径并尝试使用url

例如

visit "/users/login"   #login_path
梁丘安晏
2023-03-14

我最终使用DatabaseCleaner gem使用DatabaseCleaner实现了这一点。策略=截断。以下是我的结论:

test\u助手。rb型

ENV["RAILS_ENV"] = "test"
require File.expand_path("../../config/environment", __FILE__)
require "minitest/autorun"
require "capybara/rails"
require "active_support/testing/setup_and_teardown"

class IntegrationTest < MiniTest::Spec
  include Rails.application.routes.url_helpers
  include Capybara::DSL
  register_spec_type(/integration$/, self)

  def last_email
    ActionMailer::Base.deliveries.last
  end

  def reset_email
    ActionMailer::Base.deliveries = []
  end
end

class HelperTest < MiniTest::Spec
  include ActiveSupport::Testing::SetupAndTeardown
  include ActionView::TestCase::Behavior
  register_spec_type(/Helper$/, self)
end

Turn.config.format = :outline 

# Database cleaner.
DatabaseCleaner.strategy = :truncation

factories.rb

FactoryGirl.define do
  sequence :email do |n|
    "email#{n}@example.com"
  end

  factory :user do
    email
    password "secret"
    password_confirmation "secret"
  end
end

集成/登录\u集成\u测试。rb型

require "test_helper"

describe "Login integration" do    
  it "shouldn't allow an invalid login" do
    visit login_path
    click_button "Log In"
    page.text.must_include "invalid"
  end

  it "should login a valid user" do
    DatabaseCleaner.clean
    user = FactoryGirl.create(:user)
    visit login_path
    within ".session" do
      fill_in "session_email", :with => user.email
      fill_in "session_password", :with => "secret"
    end
    click_button "Log In"
    page.text.must_include "Logged in!"
    save_and_open_page
  end
end
 类似资料:
  • 我认为这可能与我在这个问题中描述的问题有关。 我不明白为什么在使用Factory Girl创建用户工厂时,Capybara无法在我的rails应用程序上测试注册表单。我不断收到一封电子邮件,邮件已被接收,出现错误。这是我的工厂: 这是我的注册测试: 这是我的test\u助手。rb: 我不太确定这有什么问题。如果我将Capybara方法添加到每一行,它可以一直到达密码字段,但Capybara无法填写

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

  • 我从来没有使用过工厂女孩,我从本周开始测试,所以所有这些新东西都让我疯狂。有人能给我解释一个使用工厂女孩创建唱片的简单方法吗? 下面是用例。我已经使用cucumber创建了一个测试,它创建了一个用户,还创建了其他记录,如帐户、用户类别。现在我正在编写第二个测试用例,其中我说不应该有测试数据(我可以使用从第一个测试创建的数据,但不希望依赖于其他测试用例)。所以我想使用factory girl为我创建

  • 我正在根据一个主要开发人员的请求编写一个自动化测试。 正在开发的网页的一部分是允许用户提取数据的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