2

我有以下雷神命令:

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)有任何想法?

4

2 回答 2

3

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

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

When I run `thor import` interactively
And I type "yes"
于 2012-09-09T13:23:12.723 回答
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

于 2012-07-16T13:55:46.023 回答