Ruby on rails Rails 3工厂与简单实例化
有人能解释一下为什么在测试过程中工厂比简单的实例化更有用吗?更清楚地说,我看不出以下两者之间的区别:Ruby on rails Rails 3工厂与简单实例化,ruby-on-rails,ruby-on-rails-3,factory,Ruby On Rails,Ruby On Rails 3,Factory,有人能解释一下为什么在测试过程中工厂比简单的实例化更有用吗?更清楚地说,我看不出以下两者之间的区别: before(:each) do @attr = { :name => "Example User", :email => "user@example.com", :password => "foobar", :password_confirmation => "foobar" } end it "should create a
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
还有这个
before(:each) do
@user = Factory(:user)
end
其工厂如下:
Factory.define :user do |user|
user.name "Michael Hartl"
user.email "mhartl@example.com"
user.password "foobar"
user.password_confirmation "foobar"
end
因为它允许您在一个地方拥有所有必需的变量和关联 此外,您可以轻松地创建存根或简单地提取属性,而无需额外的代码 一旦你有了几个测试文件,你的兴趣就会更明显,因为你想保持你的代码干燥 旁注:
你应该使用“let”而不是每次创建一个实例变量,你的应用程序越大,你从工厂获得的好处就越多 您的解决方案适用于2-3款车型。但是假设您有一个文章模型,您需要有效的用户来测试内容。现在您有了两个文件,可以在其中为用户定义@attr。现在想象一下,有更多的模型需要用户,比如评论、角色等等。这会变得很混乱 使用工厂更方便。好处是您可以定义多个默认原型。像管理员用户、普通用户、未注册用户等 此外,代码是干的,所以如果您添加一个新的必填字段,您可以将它添加到您的工厂一次,您就完成了
所以答案是:基本上它们是一样的,但是你的应用程序越大,你就越需要一种管理所有原型的方法。谢谢你。对我来说,它看起来是一样的,所以我认为它很方便,但因为我是从零开始学习的,所以我想确保我没有遗漏任何东西。塔克斯!