Модульное тестирование метода, в котором я делаю внедрение зависимости - PullRequest
0 голосов
/ 03 марта 2019

У меня есть терминальное приложение с двумя классами: Todo и TodoApp.Приведенный ниже метод живет в TodoApp, я хотел бы провести модульное тестирование этого метода и сохранить его изолированным в своем тесте.Так как я делаю инъекцию зависимостей в методе, как я могу это высмеять?(@todos - пустой массив в инициализации TodoApp)

 def add(task, day, todo = Todo)
    @todos.push(todo.new(task, day))
    return "#{task} was added to your todos"
 end

Заранее благодарим за помощь.

1 Ответ

0 голосов
/ 05 марта 2019

Я думаю, ваш код выглядит следующим образом.

class TodoApp
  def initialize 
    @todos = []
  end

  def add(task, day, todo = Todo)
    @todos.push(todo.new(task, day))
    return "#{task} was added to your todos"
  end
end

Это НЕ внедрение пустого массива в TodoApp.И, следовательно, вам будет трудно получить доступ к нему из тестов.

Но, если ваш объект TodoApp выглядел так:

class TodoApp
  def initialize(todos = [])
    @todos = todos
  end

  def add(task, day, todo = Todo)
    @todos.push(todo.new(task, day))
    return "#{task} was added to your todos"
  end
end

Теперь вы вводите в TodoApp что-то, что может бытьиздевались или даже просто оценивали:

describe TodoApp do
  subject(:app) { described_class.new(todos) }

  let(:todos) { [] }

  describe '#add' do
    subject(:add) { app.add(task, day) }

    let(:task) { 'task' }
    let(:day) { 'day' }

    it 'pushes the item on the list of todos' do
      expect { add }.to change { todos.length }.by(1)
    end
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...