Тестирование метода, определенного в грабли - PullRequest
10 голосов
/ 20 января 2012

Я хочу протестировать метод, определенный в задаче rake.

rake file

#lib/tasks/simple_task.rake
namespace :xyz do
    task :simple_task => :environment do
        begin
            if task_needs_to_run?
                puts "Lets run this..."
                #some code which I don't wish to test
                ...
            end
        end
    end
    def task_needs_to_run?
        # code that needs testing
        return 2 > 1
    end

end

Теперь я хочу проверить этот метод, task_needs_to_run? в тестовом файле. Как сделатьЯ делаю это?

Дополнительное примечание: В идеале я бы хотел проверить и другой приватный метод в задаче rake ... Но об этом я могу побеспокоиться позже.

Ответы [ 3 ]

8 голосов
/ 20 января 2012

Обычный способ сделать это - переместить весь текущий код в модуль и оставить реализацию задачи только для:

require 'that_new_module'

namespace :xyz do
  task :simple_task => :environment do
    ThatNewModule.doit!
  end
end

Если вы используете переменные среды или аргумент команды, просто передайте их:

ThatNewModule.doit!(ENV['SOMETHING'], ARGV[1])

Таким образом, вы можете протестировать и реорганизовать реализацию, не затрагивая задачу rake.

6 голосов
/ 27 января 2012

Вы можете просто сделать это:

require 'rake'
load 'simple_task.rake'
task_needs_to_run?
=> true

Я попробовал это сам ... определение метода внутри пространства имен Rake - это то же самое, что определение его на верхнем уровне.

load Использование файла Rakefile не выполняет ни одной из задач ... оно просто определяет их.Таким образом, нет никакого вреда в load использовании вашего Rakefile внутри тестового скрипта, поэтому вы можете тестировать связанные методы.

0 голосов
/ 09 ноября 2018

При работе в проекте с контекстом граблей (что-то вроде этого) уже определено:

describe 'my_method(my_method_argument)' do
  include_context 'rake'

  it 'calls my method' do
     expect(described_class.send(:my_method, my_method_argument)).to eq(expected_results)
  end
end
...