lundi 22 août 2016

Change the value of a described_class.new argument

I have the following code:

require 'command'

describe Command do
  subject(:command) { described_class.new(input, robotic_rover) }

  let(:robotic_rover) do
    double(:robotic_rover, position: '0 0 N',
                           move: '0 1 N',
                           right_turn: '0 0 E',
                           left_turn: '0 0 W')
  end

  describe 'advance command' do
    let(:input) { 'M' }

    describe 'initialization' do
      it 'alters a rovers position' do
        expect(command.position_change).to eq robotic_rover.move
      end
    end
  end

  describe 'right command' do
    let(:input) { 'R' }

    describe 'initialization' do
      it 'alters a rovers direction' do
        expect(command.position_change).to eq robotic_rover.right_turn
      end
    end
  end

  describe 'left command' do
      let(:input) { 'L' }

    describe 'initialization' do
      it 'alters the rovers direction' do
        expect(command.position_change).to eq robotic_rover.left_turn
      end
    end
  end
end

Inside each of the initial describe blocks (advance command, right command and left command), I have attempted to define the value for the input argument passed into the described_class.new(input, robotic_rover) with a let.

What happens is that only the last test (left command), passes and the first two tests (advance command, and right command) fail with:

 Failure/Error: expect(command.position_change).to eq robotic_rover.right_turn

   expected: "0 0 E"
        got: nil

If I remove the let from each of the first two tests, then they fail with:

 Failure/Error: subject(:command) { described_class.new(input, robotic_rover) }

 NameError:
   undefined local variable or method `input' for #<RSpec::ExampleGroups::Command::AdvanceCommand::Initialization:0x007f90cc14f758>

can anyone help me with changing the value of that initialize argument for each of the describe blocks?

Aucun commentaire:

Enregistrer un commentaire