根据我的阅读,似乎有两种方法可以从类名中获取对象.使用NSClassFromString()
和NSBundle
's 之间有什么区别classNamed:(NSString *)
?
我正在尝试使用Spork将Factory Girl用于RSpec.每当我在没有spork的情况下运行测试时,一切都会通过,但是当我使用Spork运行它时,所有试图创建依赖于另一个工厂的工厂实例的测试都会失败.例如:
3) Invitation has a correctly formed body
Failure/Error: request = FactoryGirl.create(:request, ....)
NoMethodError:
undefined method `user=' for #<Request:0x007f86b6a87890>
Run Code Online (Sandbox Code Playgroud)
我的factories.rb
代码看起来大致如此
FactoryGirl.define do
factory :user do
sequence(:first_name) { |n| "first_name#{n}" }
sequence(:last_name) { |n| "last_name#{n}" }
end
factory :request do
association :user, :factory => :user, :is_walker => false
end
end
Run Code Online (Sandbox Code Playgroud)
我的代码似乎只有在存在关联时才会中断,然后它会尝试在上面调用setter :user
.为什么会发生这种情况?
这是我正在使用的版本
gem 'rails', '3.0.7'
gem 'rspec-rails', '2.6.1'
gem 'spork', '0.9.0.rc5'
gem 'factory_girl_rails', '1.0'
Run Code Online (Sandbox Code Playgroud) 在railsstutorial中,为什么作者选择使用它(清单10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-users
namespace :db do
desc "Fill database with sample data"
task :populate => :environment do
Rake::Task['db:reset'].invoke
User.create!(:name => "Example User",
:email => "example@railstutorial.org",
:password => "foobar",
:password_confirmation => "foobar")
99.times do |n|
name = Faker::Name.name
email = "example-#{n+1}@railstutorial.org"
password = "password"
User.create!(:name => name,
:email => email,
:password => password,
:password_confirmation => password)
end
end
end
Run Code Online (Sandbox Code Playgroud)
使用假用户填充数据库,以及(清单7.16) http://ruby.railstutorial.org/chapters/modeling-and-viewing-users-two
Factory.define :user do |user|
user.name "Michael Hartl"
user.email "mhartl@example.com"
user.password "foobar"
user.password_confirmation "foobar"
end
Run Code Online (Sandbox Code Playgroud)
似乎两种方式都在数据库中创建用户权限(工厂女孩是否在数据库中创建用户)?创建测试用户的两种不同方式是什么原因,它们有何不同?什么时候一种方法比另一种方法更合适?