Easy Active Record 教程中的失败测试
Failing test from Easy Active Record Tutorial
我在完成教程时遇到了失败的测试:Jason Gilmore 为 Rails 开发人员编写的 Easy Active Record。
对于某些上下文,本教程指示我生成位置模型。结果如下:
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 并将 return 保存到位置规范 (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_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
所以我的第二个问题是,为什么我的测试失败了,我应该怎么做才能解决它?
非常感谢任何帮助
这是规范中的一个错误。测试应该是
expect(location.name).to eq('Pizza Works')
您希望位置名称是 'Pizza Works'。不是对象 'location' 它自己。
更新此代码:
it "can be created using a factory" do
location = FactoryGirl.build(:location)
expect(location.name).to eq('Pizza Works')
end
我在完成教程时遇到了失败的测试:Jason Gilmore 为 Rails 开发人员编写的 Easy Active Record。
对于某些上下文,本教程指示我生成位置模型。结果如下:
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 并将 return 保存到位置规范 (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_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
所以我的第二个问题是,为什么我的测试失败了,我应该怎么做才能解决它?
非常感谢任何帮助
这是规范中的一个错误。测试应该是
expect(location.name).to eq('Pizza Works')
您希望位置名称是 'Pizza Works'。不是对象 'location' 它自己。
更新此代码:
it "can be created using a factory" do
location = FactoryGirl.build(:location)
expect(location.name).to eq('Pizza Works')
end