测试交互式Thor任务

时间:2012-06-07 16:30:58

标签: ruby-on-rails ruby cucumber thor

我有以下命令:

require 'highline'
class Import < Thor

  desc "files", "Import files into the database"
  method_option "path", :required => true, :desc => "Path to folder containing new  files", :aliases => "-p", :type => :string

  def files
    require './config/environment'

    line = HighLine.new
    line.say(line.color("Identified files as Version 15 (English)", :green))
    if line.agree(line.color("Are you sure you want to import?", :yellow))
      line.say(line.color("Finished.  Imported 70,114 items", :green))
    else
      line.say(line.color("Aborting...", :red))
    end
  end

end

现在,显然,目前这只是向屏幕输出一些语言。但是,我需要做的是为测试输出的命令编写一个测试,就像我期望的那样,当我开始在繁重的工作中挂钩时,我可以将这些东西存在。

我看过Aruba,但由于某种原因,这似乎不像是互动,而且不清楚原因。

因此,有没有人对如何测试它(使用RSpec)有任何想法?

2 个答案:

答案 0 :(得分:3)

Aruba是一套完整的测试命令行应用程序的步骤。如果它不适合您,可能是因为aruba将所有文件操作默认为tmp/aruba

但是neimOo对于如何使用aruba编写场景是正确的

When I run `thor import` interactively
And I type "yes"

答案 1 :(得分:0)

以下是使用Aruba执行此操作的方法

Scenario: Test import
  When I run `thor import` interactively
  And I type "yes"
  Then the stdout should contain "Finished.  Imported 70,114 items"

在这里你可以找到很多aruba的例子 https://github.com/cucumber/aruba/blob/master/features/interactive.feature

这是实施本身 https://github.com/cucumber/aruba/blob/master/lib/aruba/cucumber.rb