【问题标题】:rspec - how to use let! to setup 2 variables?rspec - 如何使用 let!设置2个变量?
【发布时间】:2014-01-19 04:03:28
【问题描述】:

我目前有:

describe 'least number of moves from x to y' do

  it 'has a populated chessboard' do
    @wp='white-pawn'
    @bp='black-pawn'

    expect(ChessBoard.new.populate_new_board).to eq [
      ['white-castle','white-knight','white-bishop','white-queen','white-king','white-bishop','white-knight','white-castle'],
      [@wp,@wp,@wp,@wp,@wp,@wp,@wp,@wp],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [@bp,@bp,@bp,@bp,@bp,@bp,@bp,@bp],
      ['black-castle','black-knight','black-bishop','black-king','black-queen','black-bishop','black-knight','black-castle']]
  end 

没问题。
我想改用 let!,所以我尝试了:

describe 'least number of moves from x to y' do

  let!(:wp){'white-pawn'}
  let!(:bp){'black-pawn'}

  it 'has a populated chessboard' do
    expect(ChessBoard.new.populate_new_board).to eq [
      ['white-castle','white-knight','white-bishop','white-queen','white-king','white-bishop','white-knight','white-castle'],
      [@wp,@wp,@wp,@wp,@wp,@wp,@wp,@wp],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [nil,nil,nil,nil,nil,nil,nil,nil],
      [@bp,@bp,@bp,@bp,@bp,@bp,@bp,@bp],
      ['black-castle','black-knight','black-bishop','black-king','black-queen','black-bishop','black-knight','black-castle']]
  end 

但它失败了,因为我现在所有的 @bp 和 @wp 值都为零。

如何解决,即为期望编写正确的 let 语法?

【问题讨论】:

    标签: ruby rspec let


    【解决方案1】:

    let! 设置的是本地方法,而不是实例变量,所以这行得通:

     it 'has a populated chessboard' do
        expect(ChessBoard.new.populate_new_board).to eq [
          ['white-castle','white-knight','white-bishop','white-queen','white-king','white-bishop','white-knight','white-castle'],
          [wp,wp,wp,wp,wp,wp,wp,wp],
          [nil,nil,nil,nil,nil,nil,nil,nil],
          [nil,nil,nil,nil,nil,nil,nil,nil],
          [nil,nil,nil,nil,nil,nil,nil,nil],
          [nil,nil,nil,nil,nil,nil,nil,nil],
          [bp,bp,bp,bp,bp,bp,bp,bp],
          ['black-castle','black-knight','black-bishop','black-king','black-queen','black-bishop','black-knight','black-castle']]
      end 
    

    【讨论】:

      【解决方案2】:

      您需要使用wp 而不是@wpbp 而不是@bp,因为它们是方法,而不是实例变量:

      describe 'least number of moves from x to y' do
      
        let!(:wp){'white-pawn'}
        let!(:bp){'black-pawn'}
      
        it 'has a populated chessboard' do
      
          expect(ChessBoard.new.populate_new_board).to eq [
            ['white-castle','white-knight','white-bishop','white-queen','white-king','white-bishop','white-knight','white-castle'],
            [wp,wp,wp,wp,wp,wp,wp,wp],
            [nil,nil,nil,nil,nil,nil,nil,nil],
            [nil,nil,nil,nil,nil,nil,nil,nil],
            [nil,nil,nil,nil,nil,nil,nil,nil],
            [nil,nil,nil,nil,nil,nil,nil,nil],
            [bp,bp,bp,bp,bp,bp,bp,bp],
            ['black-castle','black-knight','black-bishop','black-king','black-queen','black-bishop','black-knight','black-castle']]
        end
      end
      

      【讨论】:

        猜你喜欢
        • 2013-05-26
        • 2014-05-17
        • 1970-01-01
        • 1970-01-01
        • 2011-07-18
        • 2020-09-25
        • 1970-01-01
        • 2018-01-04
        • 1970-01-01
        相关资源
        最近更新 更多