为什么在示例中let(:counter){0}返回nil?

在Rspec中有两个变量,它们都是整数,但是在示例中(在“之前”块中),它们中的一个是适当的自己的值,另一个是nil。为什么?!从未听说过这种奇怪的rspec行为。

尝试将0值更改为1 尝试更改变量名称, 尝试将'let'更改为'let!', 但是行为没有改变。

代码是:

context 'when input contains incorrect symbols' do
      let(:counter) { 1 }
      let(:mocked_retry_count) { 5 }
      before do
        allow(described_class).to receive(:gets) {
          byebug
          counter += 1
          counter > mocked_retry_count ? 'Stop the loop' : ['$',(0..9).to_a.sample,'#','%','&'].sample
        }
        described_class.ask_kingdoms
      end
    end

在byebug的输出中,我看到了

   62:       let(:counter) { 1 }
   63:       let(:mocked_retry_count) { 5 }
   64:       before do
   65:         allow(described_class).to receive(:gets) {
   66:           byebug
=> 67:           counter += 1
   68:           counter > mocked_retry_count ? 'Stop the loop' : ['$','&'].sample
   69:         }
   70:         described_class.ask_kingdoms
   71:       end
(byebug) counter
nil
(byebug) mocked_retry_count
5

“ counter”和“ mocked_retry_count”之间的主要区别是什么?以及如何获得示例计数器?

zys2229888 回答:为什么在示例中let(:counter){0}返回nil?

  

为什么let(:counter) { 0 }在示例中返回nil?

不,不是。 counter不是您所想的。尝试评估/打印defined?(counter)defined?(mocked_retry_count)

  

“ counter”和“ mocked_retry_count”之间的主要区别是什么?

您未分配给mocked_retry_count。请记住,let创建方法。因此,当您尝试分配给counter时,您正在创建一个局部变量counter,该局部变量遮盖了方法counter(默认值为nil)。

这篇文章更详细地解释:Why is `a = a` `nil` in Ruby?

本文链接:https://www.f2er.com/3165873.html

大家都在问