Rspec 直到创建Mongoid块?
我正在使用和为带有rspec的API创建测试。Mongoid在生产中不是问题,但在测试API规范时,如:Rspec 直到创建Mongoid块?,rspec,mongoid,Rspec,Mongoid,我正在使用和为带有rspec的API创建测试。Mongoid在生产中不是问题,但在测试API规范时,如: it "renders [person]" do person = FactoryGirl.create(:person) get 'persons' json.count.should eq(1) end 正在创建的模型实例(在本例中为Person)有时在API调用运行时未反映在数据库中,导致如下错误: Failure/Error: json.count.should eq
it "renders [person]" do
person = FactoryGirl.create(:person)
get 'persons'
json.count.should eq(1)
end
正在创建的模型实例(在本例中为Person
)有时在API调用运行时未反映在数据库中,导致如下错误:
Failure/Error: json.count.should eq(1)
expected: 1
got: 0
(compared using ==)
如何创建新的数据库条目并阻止规范的进一步执行,直到我知道该条目反映在数据库中?如下所述:
为了确保您始终可以立即读回您刚刚创建的数据
使用Mongoid
编写,您需要设置数据库会话选项
consistency: :strong, safe: true
两者都不是默认值
如本文所述:
为了确保您始终可以立即读回您刚刚创建的数据
使用Mongoid
编写,您需要设置数据库会话选项
consistency: :strong, safe: true
两者都不是默认值
你可以用代替工厂女孩。。。哪个更好/更稳定/可以做各种模型。。。例如我有
这是另一个例子
如果您计划在特定条件下制作模型,如(订阅用户只能创建审阅),则以下制作可以完成
Fabricator(:review) do
rating { (1..5).to_a.sample }
content { Faker::Lorem.sentence(2) }
subscription { Fabricate(:subscription) } # review this subscription
author { Fabricate(:user) } # author of the review
before_create do |review|
# this insures that the author had already subscribed to the subscription
# so that the review model doesn't throw validation errors.
subscription.subscribers.create!(user: author)
end
end
这是你永远不能用FactoryGirl做的事
底线我已经使用FactoryGirl两个月了,特别是在嵌入文档方面,我遇到了很多问题。。。而且我已经转移到制造业,并且在超过4个月的时间里没有任何问题。。。事实上,它确实对集成测试有很大帮助。您可以使用它代替factory girl。。。哪个更好/更稳定/可以做各种模型。。。例如我有
这是另一个例子
如果您计划在特定条件下制作模型,如(订阅用户只能创建审阅),则以下制作可以完成
Fabricator(:review) do
rating { (1..5).to_a.sample }
content { Faker::Lorem.sentence(2) }
subscription { Fabricate(:subscription) } # review this subscription
author { Fabricate(:user) } # author of the review
before_create do |review|
# this insures that the author had already subscribed to the subscription
# so that the review model doesn't throw validation errors.
subscription.subscribers.create!(user: author)
end
end
这是你永远不能用FactoryGirl做的事
底线我已经使用FactoryGirl两个月了,特别是在嵌入文档方面,我遇到了很多问题。。。而且我已经转移到制造业,并且在超过4个月的时间里没有任何问题。。。事实上,它确实对集成测试有很大帮助。正如我所解释的,Mongodb的Mongoid默认为“最终一致性”模型,因为它提供了更高的性能
在典型的Mongodb设置中,数据库写入成功返回和数据读取之间可能存在延迟。原因有两个:
- 为了提高性能,在将数据提交到磁盘之前,可能会返回“不安全”写入李>
- Mongodb使用副本集,存在复制延迟。通常,读取作为负载平衡的一种形式分发到副本,因此即使使用安全写入,也可能是从与刚写入的服务器不同的服务器读取,因此看不到刚写入的数据
一致性::strong,安全性:true
,这两个选项都不是默认选项 正如我所解释的,Mongoid和Mongodb默认为“最终一致性”模型,因为它提供了更高的性能
在典型的Mongodb设置中,数据库写入成功返回和数据读取之间可能存在延迟。原因有两个:
- 为了提高性能,在将数据提交到磁盘之前,可能会返回“不安全”写入李>
- Mongodb使用副本集,存在复制延迟。通常,读取作为负载平衡的一种形式分发到副本,因此即使使用安全写入,也可能是从与刚写入的服务器不同的服务器读取,因此看不到刚写入的数据
为了确保始终能够立即读回刚刚使用Mongoid编写的数据,需要设置数据库会话选项
一致性::strong,安全性:true
,这两个选项都不是默认选项 在mongoid.yml中更改测试环境的配置,如下所示:
test:
sessions:
default:
hosts:
- localhost
database: project-test
options:
...
consistency: :strong
safe: true
...
这样,mongoid将等待mongodb完成操作。在mongoid.yml中更改测试环境的配置,如下所示:
test:
sessions:
default:
hosts:
- localhost
database: project-test
options:
...
consistency: :strong
safe: true
...
这样,mongoid将等待mongodb完成操作。您如何知道这是一个时间问题?“如果你耽搁了,它会过去吗?”彼得:是的。
sleep(1)
几乎每次都会让它过去。你怎么知道这是一个时间问题?“如果你耽搁了,它会过去吗?”彼得:是的。睡眠(1)几乎每次都会让它过去