Tag: factory bot

如何在rspec测试中存根gmaps4rails地理编码function?

我正在使用gmaps4rails,并尝试开发一些测试。 我有一家工厂 factory :country do sequence(:name) { |n| “Country#{n}” } end 这显然不被谷歌认可。 Validation failed: Gmaps4rails address Address invalid API调用也需要时间在我的测试中运行。 如何将API调用存根? 我试过添加 before(:each) Country.stub(:geocode) end 到spec文件,但它没有任何效果。 我的模型看起来像这样 class Country ‘latitude’, :lng => ‘longitude’ def gmaps4rails_address “#{self.name}” end geocoded_by :gmaps4rails_address after_validation :geocode end 谢谢你的任何想法。

工厂女孩“捆绑安装”期间的“无效的gemspec”消息(rails 3.1和ruby 1.9.2p290)

注意: 当我使用Ubuntu 11.10使用factory_girl gem进行bundle install时遇到意外消息时,我问了这个问题。 作为一个菜鸟我有……但仍然……不知道发生了什么。 下面的更新试图概述我为最终消除这些消息所做的工作。 我将问题放在一个稍微更相关的标题行,以防它可能对其他人有用。 我看看Factory Girl的README.md ,我看到: 安装 gem安装factory_girl 或者将以下行添加到Gemfile: gem’factory_girl’ 并从您的shell运行bundle install。 支持的Ruby版本 Factory Girl 3.x系列支持Ruby 1.9.x. 对于旧版本的Ruby,请使用Factory Girl 2.x系列。 因为我目前正在使用 Rails 3.1.0和 ruby 1.9.2p290 (2011-07-09 revision 32553) [i686-linux] 我将gem’factory_girl gem ‘factory_girl’添加到我的Gemfile中并进行bundle update 。 但接下来我打开Getting Started.md文件并阅读 更新你的Gemfile 如果你正在使用Rails,你需要改变 factory_girl_rails所需的版本: gem“factory_girl_rails”,“〜> 2.0” 如果你不使用Rails,你只需要 更改factory_girl所需的版本: gem“factory_girl”,“〜> 3.0” 更新Gemfile后,您将需要更新捆绑包。 好的。 我从我的Gemfile中删除了gem’factory_girl gem ‘factory_girl’ […]

单表inheritance与Rails中的工厂女孩

我正在使用FactoryGirl和FactoryGirl制作Rails 4.0.1应用程序,但我无法让我的测试正常工作。 我正在使用单表inheritance来创建Collection < ActiveRecord::Base和VideoCollection < Collection模型。 在我的测试中使用Factory Girl时,模型似乎没有像他们应该那样实例化。 细节: 当我在浏览器中直观地检查我正在测试的视图时,它会正确显示集合。 当我在测试中为同一视图运行print page.html时,该集合不会出现在页面代码中。 如果我使用rails c test进入测试控制台并执行FactoryGirl.create(:video_collection) ,那么video集合就会插入到数据库中没问题。 代码: 我的模特: # ——in app/models/collection.rb—— class Collection < ActiveRecord::Base end # ——in app/models/video_collection.rb—— class VideoCollection < Collection end # ——in db/schema.rb—— create_table "collections", force: true do |t| t.string "type" t.datetime "created_at" t.datetime "updated_at" t.string "name" t.string "tile_image_link" end […]

为rails中的自引用关联构建工厂

我有一个典型的要求,我必须解决用户对象如下 user.referrer and user.referrers. 基本上,用户可以引用多个人,并且一个人应该由一个特定用户引用。 所以我建立如下关联。 他们工作得很好。 class User “User”, :foreign_key => “referrer_id” belongs_to :referrer, :class_name => “User” end 现在我想在Rspec中测试一下。 我正在使用工厂女孩,所以任何人都帮我建工厂。 我尝试如下,但最终出现错误 factory :user do gender :male name “super test” ….. ….. factory :referrer do end association :referrer end

工厂女孩与枚举和协会

我有一个使用关联和枚举属性的模型。 class ProjectItem < ActiveRecord::Base belongs_to :project enum status: {open: 0, pending: 1, completed: 2} 当我在带有关联的模型的创建操作上运行测试时,我使用build(:model_name).attributes如下所示: it “creates a new ProjectItem” do expect { post :create, document_project_item: build(:project_item).attributes }.to change(ProjectItem, :count).by(1) end 这是失败的,我发现这个问题线程解释了为什么它不起作用 。 根据评论,我能够确定在具有enum属性但没有关联的表上,按预期方式使用attributes_for(:model_name) 。 问题主题似乎没有建议解决方法,但我承认我不明白FactoryGirl方法在幕后所做的100%。 这是工厂: factory :project_item do project name { Faker::Company.bs } description { Faker::Lorem.paragraph } status :open due { Faker::Date.between(2.days.ago, […]

Rspec validates_uniqueness_of测试失败并出现其他validation错误

我在答案模型上有2个范围的唯一性validation,我试图使用Rspec和相应的shoulda匹配器来测试这些。 如下面的test trace所示,唯一性validation消息存在于errors数组中,但是,还存在2个,有时还存在3个其他错误; “body can’t be blank (nil)”, “body is too short (minimum is 10 characters) (nil)”, “user_id can’t be blank (nil)” 。 我不确定它们来自哪里,因为body和user属性是在before块中明确设置的。 如何更正这些额外错误,以便唯一性测试通过? answer.rb validates_uniqueness_of :correct, scope: :question_id, if: :correct?, message: “You can only have 1 correct answer per question” validates_uniqueness_of :user_id, scope: :question_id, message: “Only 1 answer per question per user” /* […]

工厂女孩 – 为什么记录会不断创建?

我是工厂女孩的新手。 我要做的是创建属于一个组的2个用户,通过权限模型加入。 这就是我所拥有的。 当我运行这个rspec时,它创建了超过2个用户,4 +。 为什么? 谢谢 factories.rb: require ‘factory_girl’ Factory.define :user do |f| f.sequence(:fname) { |n| “fname#{n}” } f.sequence(:lname) { |n| “lname#{n}” } f.sequence(:email) { |n| “email#{n}@google.com” } f.password “password” f.password_confirmation { |u| u.password } f.invitation_code “xxxxxxxx” end Factory.define :group do |f| f.association :user f.sequence(:name) { |n| “myGroup#{n}” } f.sequence(:private_email) { |n| “myGroup#{n}” } […]

Rails 4使用Engine的Factory Girl工厂

我已经创建了一个rails引擎(完整的,不可安装的)来为许多不同的rails应用程序提供模型。 我使用Factory Girl Rails测试这个引擎,测试对于引擎本身都运行良好。 我现在希望能够在包含此引擎的其他应用程序中使用这些工厂。 Gemspec的依赖关系如下所示: s.add_dependency “rails”, “~> 4.0.3” s.add_dependency “mysql2”, “~> 0.3.15” s.add_development_dependency “rspec-rails”, “~> 3.0.0.beta” s.add_development_dependency “factory_girl_rails”, “~> 4.4.1” s.add_development_dependency “shoulda-matchers”, “~> 2.5.0” 我在/spec/factories.rb中定义了我的工厂: factory :user do … end 要将factories.rb添加到factory girl中的定义路径,我将以下内容添加到我的/lib/engine_name/engine.rb文件中: class Engine “factory_girl.set_factory_paths” do FactoryGirl.definition_file_paths << File.expand_path('../../../spec/factories.rb', __FILE__) if defined?(FactoryGirl) end end 在我的rails应用程序中,我通过将以下内容添加到Gemfile来包含引擎: gem ‘engine_name’, git: “” 我还将factory_girl_rails添加到应用程序中(有没有一种方法可以从引擎中公开它?而不是必须在应用程序Gemfile中指定它?)。 并且在spec_helper.rb中需要工厂女孩栏: require ‘factory_girl_rails’ […]

Factory_girl与validates_presence_of有__的关系

我有2个型号: # user.rb class User :destroy end # profile.rb class Profile < ActiveRecord::Base belongs_to :user validates_presence_of :user end # user_factory.rb Factory.define :user do |u| u.login "test" u.association :profile end 我想做这个: @user = Factory(:user) => # @user.profile => # @user = Factory.build(:user) => # @user.profile => # 但这不起作用! 它告诉我,我的个人资料模型不正确,因为没有用户! (它在用户之前保存配置文件,因此没有user_id …) 我怎样才能解决这个问题? 尝试了一切…… :(我需要调用Factory.create(:user)… UPDATE 修复了这个问题 […]

Rails模型测试 – 模拟与工厂

Rails测试模拟对象与使用工厂对象的最佳实践是什么。 是否应该在模型可能转到外部源时使用模拟? 或者,当您测试实际模型并使用模拟处理其他所有内容时,您是否只使用工厂? 例如,如果我们在测试客户模型时有客户和订单的销售系统,我们是否会模拟订单或者我们只是使用工厂订单? 它甚至有所作为吗?