2016-01-21 3 views
3

У меня есть задача rake, которая генерирует нового пользователя. Значения электронной почты, пароля и пароля_подтверждения (подтверждение) должны вводиться через командную строку.Rspec Rake Task: как анализировать параметр?

Это мой рейк код задачи:

namespace :db do 
    namespace :setup do 
    desc "Create Admin User" 
    task :admin => :environment do 
     ui  = HighLine.new  
     email = ui.ask("Email: ") 
     password = ui.ask("Enter password: ") { |q| q.echo = false } 
     confirm = ui.ask("Confirm password: ") { |q| q.echo = false } 

     user = User.new(email: email, password: password, 
        password_confirmation: confirm) 
     if user.save 
     puts "User account created." 
     else 
     puts 
     puts "Problem creating user account:" 
     puts user.errors.full_messages 
     end 
    end 
    end 
end 

Я могу назвать это, набрав «грабли БД: настройки: админ» из моей командной строки.

Теперь я хочу протестировать эту задачу с помощью rspec. До сих пор мне удалось создать следующую спецификацию файл:

require 'spec_helper' 
require 'rake' 

describe "rake task setup:admin" do 
    before do 
    load File.expand_path("../../../lib/tasks/setup.rake", __FILE__) 
    Rake::Task.define_task(:environment) 
    end 

    let :run_rake_task do 
    Rake.application["db:setup:admin"] 
    end 

    it "creates a new User" do 
    run_rake_task 
    end 
end 

При выполнении спецификации моей передней задачи будет запрашивать для ввода из моей командной строки. Поэтому мне нужно проанализировать значение для электронной почты, пароля и подтвердить, чтобы при выполнении моих спецификаций задача rake не запрашивала значение этих полей.

Как я могу достичь этого из файла спецификации?

ответ

2

Вы можете гасите HighLine:

describe "rake task setup:admin" do 
    let(:highline){ double(:highline) } 
    let(:email){ "[email protected]" } 
    let(:password){ "password" } 

    before do 
    load File.expand_path("../../../lib/tasks/setup.rake", __FILE__) 
    Rake::Task.define_task(:environment) 
    allow(HighlLine).to receive(:new).and_return(highline) 
    allow(highline).to receive(:ask).with("Email: ").and_return(email) 
    allow(highline).to receive(:ask).with("Enter password: ").and_return(password) 
    allow(highline).to receive(:ask).with("Confirm password: ").and_return(password) 
    end 

    let :run_rake_task do 
    Rake.application["db:setup:admin"] 
    end 

    it "creates a new User" do 
    run_rake_task 
    end 
end 
+0

Как бы вы получите эту ошибку? NameError: uninitialized constant HighlLine # ./spec/lib/tasks/data_rake_spec.rb:10:in 'block (2 levels) in ' –