Ruby on rails Easy Active Record教程中的测试失败

Ruby on rails Easy Active Record教程中的测试失败,ruby-on-rails,factory-bot,Ruby On Rails,Factory Bot,当我阅读JasonGilmore的教程:Rails开发人员的EasyActiveRecord时,我的测试失败了 对于某些上下文,教程指示我生成位置模型。结果如下: rails generate model Location name:string invoke active_record create db/migrate/20140724130112_create_locations.rb create app/models/location.rb invoke

当我阅读JasonGilmore的教程:Rails开发人员的EasyActiveRecord时,我的测试失败了

对于某些上下文,教程指示我生成位置模型。结果如下:

rails generate model Location name:string
  invoke  active_record
  create    db/migrate/20140724130112_create_locations.rb
  create    app/models/location.rb
  invoke    rspec
  create      spec/models/location_spec.rb
  invoke      factory_girl
  create       spec/factories/locations.rb
在“使用FactoryGirl定义夹具”一节中,Gilmore希望展示FactoryGirl如何提供生成模型工厂的工具。为此,我奉命打开spec/factories/locations.rb并期望看到:

FactoryGirl.define do 
  factory :location do
    name "MyString"
  end
end
然后修改上面的文件,使其如下所示:

FactoryGirl.define do

  factory :location do 
    name 'Pizza Works'
  end 
end 
然后我被告知保存文件,即locations.rb,并返回位置规范(spec/models/Location.rb),并添加以下测试:

it "can be created using a factory" do 
  location = FactoryGirl.build(:location) 
  expect(location).to eq('Pizza Works')
end
第一个问题是没有这样的文件,即(spec/models/location.rb)不存在。spec文件夹中与该文件最接近的文件是(spec/models/location_spec.rb

因此,我猜测这是一个输入错误,于是将上面的测试添加到(spec/models/location\u spec.rb)中

我的第一个问题是我是否不知何故错过了location.rb文件?或者这是Gilmore的错别字

第二,在使用

rspec -fd spec/models/location_spec.rb 
教程说我应该得到以下结果

Location
  can be instantiated
  has a valid factory
  can be assigned the name of an arcade

Finished in 0.04053 seconds (files took 2.05 seconds to load)
3 examples, 0 failures
但我得到的是

Location
  can be instantiated
  can be assigned the name of an arcade
  can be created using a factory (FAILED - 1)

Failures:

  1) Location can be created using a factory
     Failure/Error: expect(location).to eq('Pizza Works')

       expected: "Pizza Works"
            got: #<Location id: nil, created_at: nil, updated_at: nil, name: "Pizza Works", description: nil>

       (compared using ==)

       Diff:
       @@ -1,2 +1,7 @@
       -"Pizza Works"
       +#<Location:0x007fcf66060850
       + id: nil,
       + created_at: nil,
       + updated_at: nil,
       + name: "Pizza Works",
       + description: nil>

     # ./spec/models/location_spec.rb:18:in `block (2 levels) in <top (required)>'

Finished in 0.05663 seconds (files took 3.26 seconds to load)
3 examples, 1 failure
位置
可以实例化
可以指定拱廊的名称
可以使用工厂创建(失败-1)
失败:
1) 可以使用工厂创建位置
失败/错误:预期(位置)。到eq('Pizza Works'))
预期:“披萨有效”
得到:#
(使用==进行比较)
差异:
@@ -1,2 +1,7 @@
-“披萨店”
+#
#./规格/型号/位置\u规格rb:18:in‘分块(2层)in’
在0.05663秒内完成(加载文件需要3.26秒)
3例,1例失败
所以我的第二个问题是,为什么我的测试失败了,我应该做些什么来修复它


非常感谢任何帮助

这是规范中的错误。测试应该是

expect(location.name).to eq('Pizza Works')

这是规范中的错误。测试应该是

expect(location.name).to eq('Pizza Works')

您希望位置名称为“Pizza Works”。不是对象“位置”本身

更新此代码:

it "can be created using a factory" do 
  location = FactoryGirl.build(:location) 
  expect(location.name).to eq('Pizza Works')
end

您希望位置名称为“Pizza Works”。不是对象“位置”本身

更新此代码:

it "can be created using a factory" do 
  location = FactoryGirl.build(:location) 
  expect(location.name).to eq('Pizza Works')
end

好极了我错过了!好极了我错过了!