FactoryGirl 不在数据库中保存对象
FactoryGirl doesn't save objects in DB
我在 spec/requests 中有这样的代码:
describe "with valid data" do
let(:player) { FactoryGirl.create :player }
let(:player2) { FactoryGirl.create :player2 }
@player = Player.new(firstname: "Tom", lastname: "Greg", nickname: "jimi21")
@player.save
@players = Player.all
p @players.count
end
控制台中的输出是:
1
为什么这段代码不在测试数据库中创建对象?我的意思是这一行:
let(:player) { FactoryGirl.create :player }
我想根据保存在数据库中的玩家编写更多测试。
我如何使用 RSpec 和 FactoryGirl 巧妙地做到这一点?
来自 FactoryGirl 文件的代码:
FactoryGirl.define do
factory :player do
firstname "John"
lastname "Smith"
nickname "smithy99"
avatar { File.new(Rails.root.join('spec/images/1.png')) }
end
factory :player2 do
firstname "Tom"
lastname "Marlow"
nickname "marlowy11"
avatar { File.new(Rails.root.join('spec/images/1.png')) }
end
end
您的代码中实际上没有任何测试,并且您从不引用您在其中设置的变量,因此您的 let
块永远不会 运行。
RSpec 中的测试包含在 it
块中,例如
it "tests something" do
# This is a test! player will be defined here!
end
如果你像这样设置一个测试,并在其中引用 player
和 player2
,它们将被定义。
如果您不想手动引用它们来定义它们,您可能想要急于加载它们,使用let!
而不是[=12] =].
要获得我认为您想要的完整代码片段:
describe "with valid data" do
let!(:player) { FactoryGirl.create :player }
let!(:player2) { FactoryGirl.create :player2 }
it "doesn't allow duplicate names" do
@player = Player.new(firstname: "Tom", lastname: "Greg", nickname: "jimi21")
@player.save
@players = Player.all
p @players.count
end
end
我在 spec/requests 中有这样的代码:
describe "with valid data" do
let(:player) { FactoryGirl.create :player }
let(:player2) { FactoryGirl.create :player2 }
@player = Player.new(firstname: "Tom", lastname: "Greg", nickname: "jimi21")
@player.save
@players = Player.all
p @players.count
end
控制台中的输出是:
1
为什么这段代码不在测试数据库中创建对象?我的意思是这一行:
let(:player) { FactoryGirl.create :player }
我想根据保存在数据库中的玩家编写更多测试。 我如何使用 RSpec 和 FactoryGirl 巧妙地做到这一点?
来自 FactoryGirl 文件的代码:
FactoryGirl.define do
factory :player do
firstname "John"
lastname "Smith"
nickname "smithy99"
avatar { File.new(Rails.root.join('spec/images/1.png')) }
end
factory :player2 do
firstname "Tom"
lastname "Marlow"
nickname "marlowy11"
avatar { File.new(Rails.root.join('spec/images/1.png')) }
end
end
您的代码中实际上没有任何测试,并且您从不引用您在其中设置的变量,因此您的 let
块永远不会 运行。
RSpec 中的测试包含在 it
块中,例如
it "tests something" do
# This is a test! player will be defined here!
end
如果你像这样设置一个测试,并在其中引用 player
和 player2
,它们将被定义。
如果您不想手动引用它们来定义它们,您可能想要急于加载它们,使用let!
而不是[=12] =].
要获得我认为您想要的完整代码片段:
describe "with valid data" do
let!(:player) { FactoryGirl.create :player }
let!(:player2) { FactoryGirl.create :player2 }
it "doesn't allow duplicate names" do
@player = Player.new(firstname: "Tom", lastname: "Greg", nickname: "jimi21")
@player.save
@players = Player.all
p @players.count
end
end