Rails 3工厂与简单实例化

The*_*dis 4 factory ruby-on-rails ruby-on-rails-3

有人可以解释为什么工厂比测试期间的简单实例更有用吗?更清楚的是,我没有看到以下区别:

before(:each) do
  @attr = {
    :name => "Example User",
    :email => "user@example.com",
    :password => "foobar",
    :password_confirmation => "foobar"
  }
end

it "should create a new instance given valid attributes" do
  User.create!(@attr)
end
Run Code Online (Sandbox Code Playgroud)

还有这个

before(:each) do
  @user = Factory(:user)
end
Run Code Online (Sandbox Code Playgroud)

其中有以下工厂:

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)

ayc*_*ter 5

您的应用程序越大,您从工厂获得的好处就越多.

您的解决方案非常适合2-3种型号.但是,假设您有一个文章模型,您需要有效的用户来测试内容.现在您有2个文件,您可以在其中为用户定义@attr.现在想象有更多需要用户的模型,比如评论,角色等等.它变得混乱.

使用工厂更方便.好处是您可以定义多个默认原型.像管理员用户,普通用户,未注册用户等.

此外,代码是DRY,因此如果您添加新的必填字段,您可以将其添加到工厂一次,然后就完成了.

答案是:基本上它们是相同的,但是你的应用程序越大,你需要一种管理所有原型的方法.