Rspec:块运行多次

Rspec: block runs multiple times

提问人:mrateb 提问时间:10/25/2023 更新时间:10/25/2023 访问量:45

问:

我在 rspec 中有一个简单的测试,如下所示:

RSpec.describe "api_request", type: :request do
   context "when a certain case is true" do
      it "returns true" do
        test_user = create(:user)
        puts "hello world"
        # jsonapi_get "/my_api_url"
        # expect([1,23]).to eq([1,22])
      end
   end
end

在处理这个块时,我注意到该块被执行了多次。为了确定这一点,我插入了语句,并继续逐行注释,以检查究竟是哪一行导致了重新运行。puts

经过多次试验,事实证明,取消注释 expect 语句会导致“hello world”显示 3 次,这意味着该块不断被重新执行。

我尝试将这个块从上下文中取出,并将其插入到不同的描述块中,结果相同。我的问题是,我怎样才能解决这种奇怪的期望行为?

Ruby-on-Rails rspec

评论

2赞 Sergio Tulentsev 10/25/2023
“这与我使用的测试完全相同”——我相信这就是你所看到的,但这是不可能的。还有其他原因(此处未显示)可能导致此行为。在这一点上,我希望看到一个可运行的示例来重现该问题。
1赞 dbugger 10/25/2023
而这只发生在这个测试块中?
2赞 Sergio Tulentsev 10/25/2023
@dbugger,这可能是他们的 rspec 配置中的一个设置,它重新运行了几次失败的规范(一个可怜的人处理不稳定规范的方式)
1赞 max 10/25/2023
@SergioTulentsev 我不认为 RSpec 实际上内置了该功能。它可以通过 rspec-rerun 或其他测试运行程序/CI 工具完成。
1赞 mrateb 10/25/2023
这也是有道理的,因为多个语句仅在失败的测试中返回。尝试了 expect([1,23]).to eq([1,23]),并且该语句仅显示一次。所以可能@max

答: 暂无答案