我正在使用Factory Girl/Rspec2/Rails 3.
在factories.rb,我有:
Factory.define :user do |user|
user.name 'Some guy'
user.email 'some_guy@somewhere.org'
user.password 'password'
end
Factory.define :org_admin, :parent => :user do |user|
user.email 'org_admin@somehwere.org'
end
Factory.define :user_with_membership_request, :parent => :user do |user|
user.email 'user_with_membership_request@somehwere.org'
end
Factory.define :organization do |org|
org.name 'MEC'
org.description 'Mountain Equipment Co-op'
end
Factory.define :membership do |membership|
membership.user { Factory(:user) }
membership.organization { Factory(:organization) }
end
Factory.define :admin_membership, :parent => :membership do |membership|
membership.user { Factory(:org_admin) }
membership.is_admin true
membership.status 'active'
end
Factory.define :membership_request, …Run Code Online (Sandbox Code Playgroud) 我正在使用Rails 3/factory_girl_rails/Rspec 2和Ruby 1.8
我用这种方式定义了我的工厂:
Factory.define :user do |u|
u.name 'Some guy'
u.sequence(:email) {|n| "person#{n}@example.com" }
u.password 'password'
end
Factory.define :password_reset_user, :parent => :user do |user|
user.password_reset_key '111222333444'
end
Run Code Online (Sandbox Code Playgroud)
我的测试运行良好.
我注意到在工厂女孩页面上,他们在他们的例子中定义了工厂而没有在do之后传递参数(http://github.com/thoughtbot/factory_girl):
# This will guess the User class
FactoryGirl.define :user do
factory :user do
first_name 'John'
last_name 'Doe'
admin false
end
# This will use the User class (Admin would have been guessed)
factory :admin, :class => User do
first_name 'Admin'
last_name 'User'
admin true
end
# The …Run Code Online (Sandbox Code Playgroud) 在我的控制器中我有:
def update
case params[:something]
when 'x'
if all_is_good
good_stuff_happens
flash[:notice] = "Good stuff happened"
else
access_denied
end
when 'y'
other_good_stuff_happens
flash[:notice] = "Other good stuff happened"
when 'z'
even_more_good_stuff_happens
flash[:notice] = "Even more good stuff happened"
end
redirect_to good_place_path
end
Run Code Online (Sandbox Code Playgroud)
在我的ApplicationController中,我有:
def access_denied
redirect_to message_path, :alert => 'Access Denied'
end
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,我总是希望在case语句之后重定向到good_place_path.
偶尔,我想拒绝访问并将其留在那里.有没有办法可以打电话
acccess_denied
Run Code Online (Sandbox Code Playgroud)
从我的控制器,然后不返回到调用控制器(或者它尝试进行第二次重定向,因此我得到DoubleRenderError).我明白我可以放
redirect_to good_place_path
Run Code Online (Sandbox Code Playgroud)
在每个when语句中,但我想知道是否有更优雅的解决方案.
谢谢.
肖恩