Ruby on rails Easy Active Record教程中的测试失败
当我阅读JasonGilmore的教程:Rails开发人员的EasyActiveRecord时,我的测试失败了 对于某些上下文,教程指示我生成位置模型。结果如下: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
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
好极了我错过了!好极了我错过了!