Rspec Rake任务:如何解析参数?

3
我有一个 rake 任务,可以生成一个新的用户。需要通过命令行输入电子邮件、密码和确认密码的值。
这是我的 rake 任务代码:
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

我可以通过在命令行中输入“rake db:setup:admin”来调用这个功能。
现在我想用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任务将从命令行请求输入。因此,我需要解析电子邮件、密码和确认的值,以便在执行规格时,rake任务不会要求输入这些字段的值。
我该如何在规格文件中实现这一点?
1个回答

2
您可以将HighLine存根出来:
describe "rake task setup:admin" do
  let(:highline){ double(:highline) }
  let(:email){ "test@example.com" }
  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

你如何解决这个错误? NameError: 未初始化常量 HighlLine # ./spec/lib/tasks/data_rake_spec.rb:10:in `block (2 levels) in <top (required)>' - Chris Hough

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接