标签: factory-bot

"仅在第二次和后续测试中找不到#<User ...>的有效映射"

我正在尝试编写一个请求测试,断言应用程序布局上显示正确的链接,具体取决于用户是登录还是退出.FWIW,我正在使用Devise进行身份验证.

这是我的规格:

require 'spec_helper'
require 'devise/test_helpers'

describe "Layout Links" do
  context "the home page" do
    context "session controls" do
      context "for an authenticated user" do
        before do
          # I know these should all operate in isolation, but I
          # want to make sure the user is explicitly logged out
          visit destroy_user_session_path

          @user = Factory(:user, :password => "Asd123", :password_confirmation => "Asd123")
          @user.confirm!

          # I tried adding this per the Devise wiki, but no change
          @request.env["devise.mapping"] = Devise.mappings[:user]

          # Now log a …
Run Code Online (Sandbox Code Playgroud)

integration-testing devise rspec2 factory-bot

28
推荐指数
3
解决办法
2万
查看次数

工厂未注册:用户

我正在关注Michal Hartls Rails教程第7章.我已经安装了Factory girl gem.我运行测试时遇到这个错误

Failures:

 1) UsersController GET 'show' should be successful
     Failure/Error: @user = FactoryGirl.create(:user)
     ArgumentError:
       Factory not registered: user
     # ./spec/controllers/users_controller_spec.rb:10:in `block (3 levels) in <top (required)>'

Finished in 0.66336 seconds 42 examples, 1 failure

Failed examples:

rspec ./spec/controllers/users_controller_spec.rb:14 # UsersController GET 'show' should be successful
Run Code Online (Sandbox Code Playgroud)

的Gemfile

group :test do
  gem 'autotest', '4.4.6'
  gem "autotest-growl", "~> 0.2.16"
  gem "autotest-rails", "~> 4.1.2"
  gem "rspec", "~> 2.9.0"
  gem 'rspec-rails',  '2.9.0'
  gem 'webrat', '0.7.3'
  gem "spork",  '0.9.0'
  gem 'annotate', '~> …
Run Code Online (Sandbox Code Playgroud)

ruby ruby-on-rails factory-bot

28
推荐指数
3
解决办法
2万
查看次数

ActiveModel :: MissingAttributeError:无法使用FactoryGirl编写未知属性"ad_id"

我有以下型号:

class Ad < ActiveRecord::Base
  belongs_to :page

  has_one :image
  has_one :logo
end

class Page < ActiveRecord::Base
  has_many :logos
  has_many :images
  has_many :ads
end

class Image < ActiveRecord::Base
  belongs_to :page
  has_many :ads
end
Run Code Online (Sandbox Code Playgroud)

我已经定义了以下工厂:

factory :page do
  url 'test.com'
end

factory :image do
  width 200
  height 200
  page
end

factory :ad do
  background 'rgb(255,0,0)'
  page
  image
end
Run Code Online (Sandbox Code Playgroud)

当我尝试这样做时:

ad = FactoryGirl.create(:ad)我ActiveModel::MissingAttributeError: can't write unknown attribute ad_id'在广告工厂中决定图像关联的行中出现以下错误.

我在这做错了什么?

ruby-on-rails factory-bot

28
推荐指数
2
解决办法
4万
查看次数

如何从脚手架完成rspec put控制器测试

我正在使用脚手架来生成rspec控制器测试.默认情况下,它会将测试创建为:

  let(:valid_attributes) {
    skip("Add a hash of attributes valid for your model")
  }

  describe "PUT update" do
    describe "with valid params" do
      let(:new_attributes) {
        skip("Add a hash of attributes valid for your model")
      }

      it "updates the requested doctor" do
        company = Company.create! valid_attributes
        put :update, {:id => company.to_param, :company => new_attributes}, valid_session
        company.reload
        skip("Add assertions for updated state")
      end
Run Code Online (Sandbox Code Playgroud)

使用FactoryGirl,我已经填写了:

  let(:valid_attributes) { FactoryGirl.build(:company).attributes.symbolize_keys }

  describe "PUT update" do
    describe "with valid params" do
      let(:new_attributes) { FactoryGirl.build(:company, name: 'New Name').attributes.symbolize_keys …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails scaffolding rspec-rails factory-bot

28
推荐指数
2
解决办法
1万
查看次数

如何重置factory_girl序列?

只要我有一个项目工厂

Factory.define :project do |p|
  p.sequence(:title)    { |n| "project #{n} title"                  }
  p.sequence(:subtitle) { |n| "project #{n} subtitle"               }
  p.sequence(:image)    { |n| "../images/content/projects/#{n}.jpg" }
  p.sequence(:date)     { |n| n.weeks.ago.to_date                   }
end
Run Code Online (Sandbox Code Playgroud)

而且我正在创建项目实例

Factory.build :project
Factory.build :project
Run Code Online (Sandbox Code Playgroud)

到这时,下次我执行Factory.build(:project)时,我将收到一个Project的实例,其标题设置为"project 3 title",依此类推.不奇怪.

现在说我想在这个范围内重置我的计数器.就像是:

Factory.build :project #=> Project 3
Factory.reset :project #=> project factory counter gets reseted
Factory.build :project #=> A new instance of project 1
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是什么?

我目前正在使用以下版本:

factory_girl(1.3.1)factory_girl_rails(1.0)

在此先感谢,最好的问候.

ruby ruby-on-rails factory-bot

27
推荐指数
5
解决办法
1万
查看次数

如何使用继承用户模型定义工厂

我遇到了以下问题:在我的应用程序中,我使用继承来定义我的用户模型:

class User
 include Mongoid::Document

 field :name...
 field :bla...
end


class CustomUser < User
 field :customuserfield...
end
Run Code Online (Sandbox Code Playgroud)

我如何编写工厂来映射我的规格中的这个类hirachie.并继续写作,不要重复自己.

FactoryGirl.define do 
  factory :user do
    name  "name"
    bla "bla"

    factory :custom_user do
      customfield "customfield"
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

这对我不起作用,因为该课程也是"用户".使用"用户"我收到了无效错误,因为自定义字段在这里并不存在.是否有良好的做法,方法或方法来重新安排这样的事情.

ruby-on-rails ruby-on-rails-3 factory-bot

27
推荐指数
2
解决办法
9578
查看次数

工厂女孩什么时候在db中创建对象?

我正在尝试使用FactoryGirl/ 来模拟会话shoulda(它使用了固定装置,但我在使用工厂时遇到了问题).我有以下工厂(用户登录和电子邮件都有unique验证):

Factory.define :user do |u| 
 u.login 'quentin'
 u.email 'quentin@example.com'
end

Factory.define :session_user, :class => Session do |ses| 
 ses.association :user, :factory => :user
 ses.session_id 'session_user'
end
Run Code Online (Sandbox Code Playgroud)

这是测试

class MessagesControllerTest < ActionController::TestCase

 context "normal user" do
  setup do 
   @request.session[:user_id]=Factory(:user).id
   @request.session[:session_id]=Factory(:session_user).session_id
  end

  should "be able to access new message creation" do
   get :new
   assert_response :success
  end
 end
end
Run Code Online (Sandbox Code Playgroud)

但是当我跑步时rake test:functionals,我得到了这个测试结果

 1) Error: 
  test: normal user should be able to access new message creation. (MessagesControllerTest): …
Run Code Online (Sandbox Code Playgroud)

ruby-on-rails shoulda factory-bot

26
推荐指数
1
解决办法
2万
查看次数

如何在Factory Girl中创建/构建工厂的多个实例?

如何创建同一类的多个记录或多个工厂?

我试过了:

Factory.define :user do |user|
  user.email "someuser@somesite.com"
  user.password "somepassword"

  user.email "another_existing_user@somesite.com"
  user.password "somepassword"
end
Run Code Online (Sandbox Code Playgroud)

Factory.define :user do |user|
  user.email "someuser@somesite.com"
  user.password "somepassword"
end

Factory.define :user do |user|
  user.email "another_existing_user@somesite.com"
  user.password "somepassword"
end
Run Code Online (Sandbox Code Playgroud)

但它不起作用 - Attribute already defined: email.

ruby-on-rails factory-bot

26
推荐指数
3
解决办法
2万
查看次数

FactoryGirl覆盖关联对象的属性

这可能很简单,但我无法在任何地方找到一个例子.

我有两个工厂:

FactoryGirl.define do
  factory :profile do
    user

    title "director"
    bio "I am very good at things"
    linked_in "http://my.linkedin.profile.com"
    website "www.mysite.com"
    city "London"
  end
end

FactoryGirl.define do 
  factory :user do |u|
    u.first_name {Faker::Name.first_name}
    u.last_name {Faker::Name.last_name}

    company 'National Stock Exchange'
    u.email {Faker::Internet.email}
  end
end
Run Code Online (Sandbox Code Playgroud)

我想要做的是在创建配置文件时覆盖一些用户属性:

p = FactoryGirl.create(:profile, user: {email: "test@test.com"})
Run Code Online (Sandbox Code Playgroud)

或类似的东西,但我不能正确的语法.错误:

ActiveRecord::AssociationTypeMismatch: User(#70239688060520) expected, got Hash(#70239631338900)
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过首先创建用户然后将其与配置文件相关联来实现此目的,但我认为必须有更好的方法.

或者这将工作:

p = FactoryGirl.create(:profile, user: FactoryGirl.create(:user, email: "test@test.com"))
Run Code Online (Sandbox Code Playgroud)

但这似乎过于复杂.是否有更简单的方法来覆盖关联的属性?这是什么语法?

ruby rspec associations factory-bot

25
推荐指数
2
解决办法
2万
查看次数

ArgumentError:工厂未注册

我想让工厂女孩在我的rails 4.1.1 app中使用rspec运行.

问题是当我rspec在命令行中运行时,我得到了Failure/Error: verse = build(:verse) ArgumentError: Factory not registered: verse.

我很遗憾,因为我检查了工厂女孩入门页面,这里的许多答案在SO和我仍然无法解决这个问题.

在我的Gemfile中:

gem 'rails', '4.1.1'
group :development, :test do
  gem 'rspec-rails'
  gem "factory_girl_rails"
end
Run Code Online (Sandbox Code Playgroud)

我的spec_helper.rb文件:

require 'factory_girl_rails'
RSpec.configure do |config|
  config.include FactoryGirl::Syntax::Methods
end
Run Code Online (Sandbox Code Playgroud)

规格/控制器/ API/verses_controller_spec.rb

describe "API Controller" do
  describe "show a verse" do
    it "should return status 200" do
      verse = build(:verse)
      get :show, id: verse.id
      expect(response).to have_http_status(200)
    end
    it "should return json object" do
      verse = build(:verse)
      get :show, id: verse.id
      JSON.parse(response.body).should …
Run Code Online (Sandbox Code Playgroud)

rspec ruby-on-rails ruby-on-rails-4 factory-bot

25
推荐指数
3
解决办法
2万
查看次数