gpt4 book ai didi

ruby-on-rails - 在 rspec 中的 block 在每次测试之前运行之前它应该只运行一次

转载 作者:数据小太阳 更新时间:2023-10-29 08:56:58 24 4
gpt4 key购买 nike

我在测试开始时运行了一个before do。我希望这个 before to 在运行我的测试之前执行一次。但是目前它在每次测试之前运行:

context "worker has failed first time and has generated only part of licenses" do
before do
order.already_went_through_license_worker = true
order.save!
order.pre_calculate_licenses
partial_generate_from_bundles(order.expected_license_bundles)
LicenseService.new.create_from_order(order.id)
end
let!(:licenses){ License.where(order_id: order.id)}
specify { subject.count.should == 34 }
specify { subject.pluck(:is_from_offer_special).count(true).should == 4}
specify { subject.pluck(:is_from_offer_special).count(false).should == 30 }
specify { subject.pluck("license_offer.offer_original_id").compact.map(&:values).flatten.count(offer.id).should == 30}
specify { subject.pluck("license_offer_special.offer_special_original_id").compact.map(&:values).flatten.count(offer_special_cyclic.id).should == 3}
specify { subject.pluck("license_offer_special.offer_special_original_id").compact.map(&:values).flatten.count(offer_special_non_cyclic.id).should == 1 }
end

当我将其更改为 before(:all) 时,出现错误:

 let declaration `order` accessed in a `before(:context)` hook at:

如何让 before block 只运行一次。

最佳答案

How can I make the before block run only once.

before(:all),你已经这样做了。

When I change it to before(:all) I get an error:

这是一个不同的、完全不相关的错误。您的 block 确实只运行一次,这就是您所要求的。这里的问题是上下文级 block 试图访问示例级声明。有点像尝试从类方法访问实例变量:那些变量还不存在!

一种可能的方法是内联所有依赖(不要使用let,直接将代码放入 block 中):

before :all do
order = create :order # or whatever
order.already_went_through_license_worker = true
order.save!
...
end

关于ruby-on-rails - 在 rspec 中的 block 在每次测试之前运行之前它应该只运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50821102/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com