我在这个线程Rails Tutorial: RSpec test decoupling中遇到了与 Nick Rutten 相同的问题。我怀疑问题是FactoryGirl.create()
保存到数据库中,感谢@prusswan 我修复了它。但是我不明白为什么这些puts
不表示不同User.count
。
这是我感兴趣的片段:
describe "with valid information" do
puts "Number of users pre-Factory:" + User.count.to_s
let(:user){FactoryGirl.create(:user)}
puts "Number of users post-Factory:" + User.count.to_s
(...)
end
我得到:
Number of users pre-Factory:0
Number of users post-Factory:0
但我不应该得到吗?
Number of users pre-Factory:0
Number of users post-Factory:1
顺便说一句,工厂被定义(虽然现在不那么相关)为:
FactoryGirl.define do
factory :user do
name "Example User"
email "user@example.com"
password "foobar"
password_confirmation "foobar"
end
end
我一直试图理解为什么计数器没有增加,不是它开始增加的问题吗?谢谢你
使用@derekyau 的建议进行编辑:
现在我有这个顺序:
it "print counter before let"
puts "Number of users:" + User.count.to_s
end
let(:user){FactoryGirl.create(:user)}
it "print counter after let"
puts "Number of users:" + User.count.to_s
end
但是现在我得到两个值1:
Number of users:1
Number of users:1
关闭但还没有!
编辑 2
正如@Peter Alfvin 在这里解释的那样:在给定的 RSpec 描述块中,let、before 和 it 语句的顺序是否重要?. let
, before
,的顺序it
几乎是确定的,无论代码如何。这与@derekyau 的解释一起结束了这个问题。