Tag: factory bot

如何在错误的rspec规范之间清理我的数据库?

我已将database_cleaner gem添加到我的rails应用程序中,以便在规范之间清理我的数据库。 这是我对database_cleaner的当前配置,位于spec/spec_helper.rb : config.before(:suite) do DatabaseCleaner.strategy = :transaction DatabaseCleaner.clean_with(:truncation) DatabaseCleaner.start DatabaseCleaner.clean end config.before(:each) do DatabaseCleaner.clean end config.after(:each) do DatabaseCleaner.clean end config.after(:suite) do DatabaseCleaner.clean end 现在,只要运行的每个最后一个规范通过或失败,此配置都可以正常工作。 但是,如果出现错误(rspec没有给你一个漂亮的小E像minitest,它会引发这样的事情: 09:17:32 – INFO – Running: spec /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/gems/1.9.1/gems/activerecord-4.0.1/lib/active_record/validations.rb:57:in `save!’: Validation failed: Email has already been taken (ActiveRecord::RecordInvalid) ),数据库没有清理! 错误之前的规范中的残留数据保留在数据库中。 我想这是因为database_cleaner不会将错误的规范视为完成,因此不会清理数据库。 现在,在您再次运行规范之前,这并不会造成任何伤害。 然后残差数据会产生类似于此的错误: 09:17:32 – INFO – Running: spec /usr/local/rvm/rubies/ruby-1.9.3-p392/lib/ruby/gems/1.9.1/gems/activerecord-4.0.1/lib/active_record/validations.rb:57:in […]

如何从引擎中使用FactoryGirl工厂

我们有两个共享相同数据库和模型的Web应用程序。 为了保持DRY,我们创建了一个包含所有模型的引擎。 此引擎通过Gemfile包含在相应的应用程序中。 我们确实在引擎内部使用RSpec和FactoryGirl进行了测试。 现在我们正在尝试编写集成测试,我们希望使用引擎中的工厂而无需复制或符号链接。 有没有办法以编程方式实现这一目标?

Rspec / FactoryGirl:清理数据库状态

我是Rspec和Factory girl的新手,希望我的测试能够在特定的数据库状态下运行。 我知道我可以让Factory girl创建这些记录,并且在测试运行后对象将被销毁,但是如果我在数据库中有数据会发生什么。 例如:我希望我的测试在我通过Factory Girl创建的数据库中有3条记录时运行。 但是,我目前在数据库中已有1个模型记录,我不想仅为测试删除它。 在那里有一个模型毁了我的测试。 数据库内容 [#] leaderboard_spec.rb require ‘spec_helper’ describe Rom::Leaderboard do describe “poll leaderboard” do it “should say ‘Successful Run’ when it returns” do FactoryGirl.create(:leaderboard, score: 400, name: “Alice”) FactoryGirl.create(:leaderboard, score: 300, name: “Bob”) FactoryGirl.create(:leaderboard, score: 200, name: “John”) Leaderboard.highest_scorer.name.should == “Alice” end end end 现在我的测试将失败,因为它会错误地认为Trudy是最高得分手,因为测试运行的状态不正确。 工厂女孩是否提供从数据库中删除记录然后回滚此删除? 类似于它在数据库中创建记录和回滚的方式

rspec +工厂模型测试嵌套属性

我有一个带有rspec + factory_girl的rails4应用程序。 我想测试validation,确保产品至少有一个function,竞争,用例和行业。 前3个必须属于产品,但行业可以独立存在。 我还没有试过把工业放在测试中,因为我甚至不能把工作放在前3。 我尝试了下面的方法,在其中我创建了一个具有product_feature,product_competition和product_usecase的产品工厂。 由于某种原因,它不起作用。 我使用正确的方法吗? 如果是这样,我的代码出了什么问题? 1) Product nested attribute validation has a valid factory Failure/Error: expect(create(:product_with_nested_attrs)).to be_valid ActiveRecord::RecordInvalid: Validation failed: You have to choose at least 1 industry., You must have at least 1 product feature., You must name at least 1 competition., You must describe at least 1 usecase. […]

如何使用inheritance用户模型定义工厂

我遇到了以下问题:在我的应用程序中,我使用inheritance来定义我的用户模型: class User include Mongoid::Document field :name… field :bla… end class CustomUser < User field :customuserfield… end 我如何编写工厂来映射我的规格中的这个类hirachie。 并继续写作不要重复自己。 FactoryGirl.define do factory :user do name “name” bla “bla” factory :custom_user do customfield “customfield” end end end 这对我不起作用,因为该课程也是“用户”。 使用“用户”我得到了一个无效的错误,因为自定义字段在这里不是defiend。 是否有一种良好的做法,方法或方法来重新安排这样的事情。

如何从脚手架完成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 […]

FactoryGirl关联模型故障:“SystemStackError:堆栈级别太深”

我正在使用Ruby on Rails 3.0.9,RSpec-rails 2和FactoryGirl。 我试图陈述一个工厂协会模型,但我遇到了麻烦。 我有一个factories/user.rb文件,如下所示: FactoryGirl.define do factory :user, :class => User do attribute_1 attribute_2 … association :account, :factory => :users_account, :method => :build, :email => ‘foo@bar.com’ end end 和一个factories/users/account.rb文件如下: FactoryGirl.define do factory :users_account, :class => Users::Account do sequence(:email) {|n| “foo#{n}@bar.com” } … end end 上面的示例在我的spec文件中按预期工作,但是如果在factory :users_account语句我添加了association :user代码所以要有 FactoryGirl.define do factory :users_account, :class […]

如何为简单的PUT更新编写RSpec测试?

我正在努力巩固我对rails和BDD工作流程的理解,所以我想通过创建其中一个迷你博客来开始,但是使用rspec。 现在我有一个ArticlesController和Article模型,以及相关的rspec文件。 文章非常简单,只有标题:字符串和内容:文本,而ArticlesController是RESTful – 虽然我手写了MCV for Article,但它基本上和我用脚手架创建它一样。 但是,当我在rspec中为PUT更新编写测试时,我真的不知道我在做什么。 我正在使用Factory Girl来创建文章对象,到目前为止我的代码看起来像: #factories.rb FactoryGirl.define do factory :article do title “a title” content “hello world” end #articles_controller_spec.rb before(:each) do @article = Factory(:article) end describe “PUT ‘update/:id'” do it “allows an article to be updated” do @attr = { :title => “new title”, :content => “new content” } put […]

Rspec和Rails 4,更新跳过回调

我尝试使用rspec为我的rails应用程序运行更新测试。 我正在使用rspec 3.5和rails 4。 行为应该是以下内容: 当我以销售价格创建新服务时,它会创建一个Price实例并设置与服务的关系。 然后,当我更新我的服务时,如果没有售价,则会破坏价格记录(客户要求节省数据库中的空间)。 我实施的过程似乎工作正常,当我用UI测试并且我检查价格记录的数量时,它会像它假设的那样减少一个。 但是,unit testing是否失败。 这是代码: 服务控制器: def update @service.assign_attributes(service_params) puts “update method” respond_to do |format| if @service.valid? if params[‘preview’] @service.build_previews format.js { render ‘services/preview’ } else @service.save! format.html { redirect_to client_trip_days_path(@client, @trip), notice: t(‘flash.services.update.notice’) } end else format.html { render :edit } format.js { render :new } end end […]

ArgumentError:工厂未注册

我试图让工厂女孩在我的rails 4.1.1应用程序中使用rspec运行。 问题是当我在命令行中运行rspec时,我得到Failure/Error: verse = build(:verse) ArgumentError: Factory not registered: verse 。 我很茫然,因为我检查了工厂女孩入门页面,这里有许多答案,我仍然无法解决这个问题。 在我的Gemfile中: gem ‘rails’, ‘4.1.1’ group :development, :test do gem ‘rspec-rails’ gem “factory_girl_rails” end 我的spec_helper.rb文件: require ‘factory_girl_rails’ RSpec.configure do |config| config.include FactoryGirl::Syntax::Methods end 规格/控制器/ API / verses_controller_spec.rb describe “API Controller” do describe “show a verse” do it “should return status 200” do verse […]