rspec let vs let!

作者: 云莉6 | 来源:发表于2019-02-15 16:24 被阅读0次

    let vs let! 只有一处不同,let 是懒加载,也就是第一次调用之后,才会被创建。let! 是不管有没有被调用,强制先创建。也就是之前我记得 java 中有一个懒汉式和饿汉式的区别。ps: 不管是 let 还是 let! 每个 it 代码块之间都是独立的干净的。

    下面这个 test 可以比较完整的看出区别:

    RSpec.describe "LetVsLet!" do
      before do
        Timecop.return
        Timecop.travel(Time.now)
      end
      
      describe "let" do
        let(:current_time) { Time.now.to_i }
    
        before { puts Time.now.to_i }
    
        it "gets the same time over and over again" do
          sleep(1)
          puts current_time.to_i
          sleep(1)
          puts current_time.to_i
        end
    
        it "gets the time again" do
          sleep(1)
          puts current_time.to_i
          sleep(1)
          puts current_time.to_i
        end
      end
    
      describe "let!" do
        let!(:current_time) { Time.now }
    
        before {
          puts Time.now.to_i
        }
    
        it "gets the same time over and over again" do
          sleep(1)
          puts current_time.to_i
          sleep(1)
          puts current_time.to_i
        end
    
        it "gets the time again" do
          sleep(1)
          puts current_time.to_i
          sleep(1)
          puts current_time.to_i
        end
      end
    end
    

    执行结果:

    ➜  otcbtc git:(t36818) ✗ bundle exec spring rspec spec/models/test_spec.rb:1
    Running via Spring preloader in process 19966
    Run options: include {:locations=>{"./spec/models/test_spec.rb"=>[1]}}
    
    LetVsLet!
      let
    1550218652
    1550218653
    1550218653
        gets the same time over and over again
    1550218654
    1550218655
    1550218655
        gets the time again
      let!
    1550218656
    1550218656
    1550218656
        gets the same time over and over again
    1550218658
    1550218658
    1550218658
        gets the time again
    
    Finished in 8.85 seconds (files took 0.61873 seconds to load)
    4 examples, 0 failures
    

    相关文章

      网友评论

        本文标题:rspec let vs let!

        本文链接:https://www.haomeiwen.com/subject/bflmeqtx.html