这是我的工厂女孩代码,每次我尝试生成一个评论时,它告诉我"电子邮件已经被拍摄",我重置了我的数据库,将spec_helper中的转换设置为true,但仍然没有解决问题.我是新来的,我使用该关联错了吗?谢谢!
Factory.define :user do |user|
user.name "Testing User"
user.email "test@example.com"
user.password "foobar"
user.password_confirmation "foobar"
end
Factory.define :course do |course|
course.title "course"
course.link "www.umn.edu"
course.sections 21
course.description "test course description"
course.association :user
end
Factory.define :review do |review|
review.title "Test Review"
review.content "Test review content"
review.association :user
review.association :course
end
Run Code Online (Sandbox Code Playgroud) 如果我在模型中的模块中定义了类型,并且在同一模型中也定义了这些类型的数组,那么在定义新工厂时如何随机调用此数组中的值?
谢谢!
约翰
我最近将应用程序升级到rails 3.2.2.
我正在使用Factory_girl
Factory.sequence:name do | n | "名字 - #{n}"结束
Factory.define:用户执行| u | u.first_name {Factory.next(:name)}
u.last_name {| u | 'last_'+ u.first_name}
u.password'secret'u.password_confirmation {| u | u.password} u.sequence(:email){| i | "user_#{i}@example.com"}结束
而这个简单的测试
指定{Factory.build(:user).should be_valid}
生成以下警告
弃用警告:您正在尝试创建属性
user_id'. Writing arbitrary attributes on a model is deprecated. Please just useattr_writer`等(从块中调用(2级)...
我怎么能摆脱它?
我有一个Invoice可能包含许多模型的模型Items:
class Invoice < ActiveRecord::Base
attr_accessible :number, :date, :recipient, :items_attributes
belongs_to :user
has_many :items
accepts_nested_attributes_for :items, :reject_if => :all_blank, :allow_destroy => true
end
Run Code Online (Sandbox Code Playgroud)
我试图使用RSpec测试这个:
describe InvoicesController do
describe 'user access' do
before :each do
@user = FactoryGirl.create(:user)
@invoice = @user.invoices.create(FactoryGirl.attributes_for(:invoice))
sign_in(@user)
end
it "renders the :show view" do
get :show
expect(response).to render_template :show
end
end
end
Run Code Online (Sandbox Code Playgroud)
不幸的是,此测试(以及所有其他测试)失败并显示来自RSpec的此错误消息:
Failure/Error: @invoice = @user.invoices.create(FactoryGirl.attributes_for(:invoice))
ActiveModel::MassAssignmentSecurity::Error:
Can't mass-assign protected attributes: items
Run Code Online (Sandbox Code Playgroud)
如何创建包含可通过测试的项目的发票?
我正在使用FactoryGirl来制作这样的对象:
factory :invoice do
number { Random.new.rand(0..1000000) } …Run Code Online (Sandbox Code Playgroud) 我的前端是一个基于EmberJS的应用程序.它本质上是完全异步的,所以用Capybara测试它是痛苦和痛苦.另一方面,Ember提供了一个开箱即用的优秀测试套件,使验收测试变得有趣和有效.
通常情况下,使用固定装置或后端模拟验收Ember应用程序.但是对模拟的测试并不能让我满意:
所以我想测试真正的后端!设置Ember以使用本地后端实例进行测试是微不足道的.但问题是后端将在各个测试甚至测试会话之间保持其状态.
这就是为什么我想在Rails中实现一个特殊的公共API:
我是一个对Rails有粗略了解的前端开发人员.Factory Girl和Database Cleaner似乎是适合这项工作的工具,但绝对没有关于如何在Rails正常测试环境之外使用它们的信息.我想我需要一个控制器或一个Rails引擎.
所以问题是:如何在Rails中创建一个API,前端可以使用它来告诉Rails使用fixture工厂设置某个数据库状态,而Rails则以非测试模式运行,即提供REST API和没有通过RSpec/Capybara/Cucumber运行?
额外功能:应在前端定义夹具工厂属性,以便将测试代码存储在一个位置.因此,后端应该能够通过特殊API接受夹具工厂属性.默认值仍然可以在后端的代码库中定义.
我相信这可能成为验收/集成测试的最佳实践.如果我设法实现它,我保证发布一个gem.
integration-testing ruby-on-rails acceptance-testing database-cleaner factory-bot
在工厂女孩/机械师的工厂中是否有一些配置强制它在测试用例期间只创建一次具有相同工厂名称的对象并且一直返回相同的实例?我知道,我可以这样做:
def singleton name
@@singletons ||= {}
@@singletons[name] ||= Factory name
end
...
Factory.define :my_model do |m|
m.singleton_model { singleton :singleton_model }
end
Run Code Online (Sandbox Code Playgroud)
但也许有更好的方法.
我有一个属于角色模型的帐户模型.
factory :role do
name "student"
end
factory :account do
user
role
end
Run Code Online (Sandbox Code Playgroud)
第一个工厂创建一个名为"student"的角色.第二个工厂创建一个帐户,该帐户与在上一个工厂中创建的学生角色相关联.它也与用户相关联......这对于这个问题并不重要.
我有很多要测试的角色(管理员,学生,助理)......我不想在角色工厂中指定'学生'......这太静态了.如何指定创建帐户工厂时要创建的角色?喜欢:
factory :account do
user
role_id { factory :role { name: "admin"} }
end
Run Code Online (Sandbox Code Playgroud)
完成此任务的最佳方法是什么?
FactoryGirl是否可以定义0-10的随机数?
factory :rating do
ranking 1 #random number?
recipe
end
Run Code Online (Sandbox Code Playgroud)
我真的希望生成的排名数是0-10之间的随机值.
我想用不同的数字生成评级,但不想在rspec中明确定义它们.这将用于显示评级数字中的平均值和其他统计数据.例如:10多个,0个多少,平均等等.
我已经安装了工厂女孩并尝试使用它与规格.
scenario 'User signs in' do
create :user, email: 'test@example.com', password: 'testpassword'
visit '/users/sign_in'
fill_in 'Email', with: 'test@example.com'
fill_in 'Password', with: 'testpassword'
end
Run Code Online (Sandbox Code Playgroud)
我收到以下错误.
Failure/Error: create :user, email: 'test@example.com', password: 'testpassword'
NoMethodError:
undefined method `create' for #<RSpec::ExampleGroups::UserSignIn:0x007fe6324816b8>
Run Code Online (Sandbox Code Playgroud) 有一个Company类has_many QuarterValue,我有一个RSpec测试.
let(:company) { Company.create }
describe 'company has many quarter values' do
before do
10.times { create(:quarter_value, company: company) }
end
it 'has 10 quarter values' do
expect(company.quarter_values.count).to eq(10)
end
end
Run Code Online (Sandbox Code Playgroud)
测试通过.我的问题是,当我放在我无法访问binding.pry的expect匹配器上方时company.quarter_values,返回空数组[].
如何使用?访问测试中的has_many模型对象?RSpecbinding.pry
FactoryGirl.define do
factory :company do
sequence(:code) { |n| n + 1000 }
end
factory :quarter_value do
company
end
end
Run Code Online (Sandbox Code Playgroud)