2016-11-05 1 views
1

私は実行可能なシェルスクリプトをcucumber/arubaの助けを借りてテストしたいと思っています。 そのために私は1つのシェルスクリプトを作成し、usr/local/bin /に置いて、どこからでもアクセスできるようにしました。キュウリ/アルバの日付を比較するには?

シェルスクリプト:

arg=$1 
if [ [ $arg = 1 ] ] 
then 
    echo $(date) 
fi 

今私はキュウリ/アルバ、このシェルスクリプトをテストしたいです。 そのために、私は1つのプロジェクト構造を作成しました。

アルバ -

├──│サポートしています├──

││└──env.rb

│└──use_aruba_cucumber.feature

├──Gemfile

ジェムファイル -

source 'https://rubygems.org' 
gem 'aruba', '~> 0.14.2' 

env.rb -

require 'aruba/cucumber' 

use_aruba_cucumber.feature -

Feature: Cucumber 
Scenario: First Run 
    When I run `bash abc_qa.sh` 
    Then the output should contain exactly $(date) 

シェルスクリプトコードは、日付を返しています。今すぐ確認したいこのフィーチャー・ファイルでは、単純な検査を使用して日付が正しいかどうかを確認します。

例: 日付は次のように返している:

土11月5日午後03時00分13秒IST 2016

ので、私はちょうど土が正しいか間違っているチェックしたいです。そのためには、このようなラベル(Mon、Tue、Wed、Thu、Fri、Sat、Sun)を使用してください。

Satが上記のラベルで利用可能な場合は、このテストケースをパスします。

注 - 私はこのラベルを簡単にするためにsakelと書いています。週の7日で日をチェックするための他のオプションが正しい場合は、これは高く評価されます。

ありがとうございました。

答えて

1

これは私がどうなるのかです:

features/use_my_date_script_with_parameter.feature

Feature: MyDateScript abc_qa 
Scenario: Run with one parameter 
    When I run `bash abc_qa.sh 1` 
    Then the output first word should be an abbreviated day of the week 
    And the output first word should be the current day of the week 
    And the output should be the current time 

この機能ファイルには、ドキュメントとプログラムのスペックでもあります。必ずしも開発者ではない人々によって書かれたものです。拡張子が ""である限り。フィーチャー、シナリオ、およびステップを使用して、フィーチャー、シナリオ、およびステップが含まれていれば、内部には何かを記述することができます。キュウリの詳細情報here

新しい行を追加することができます。A及びませんB」)、およびキュウリを起動することが失敗することはありません、それはちょうどあなたが手順ファイルで定義するべきかを教えてくれます

features/step_definitions/time_steps.rb:。

require 'time' 

Then(/^the output should be the current time$/) do 
    time_from_script = Time.parse(last_command_started.output) 
    expect(time_from_script).to be_within(5).of(Time.now) 
end 

Then(/^the output first word should be an abbreviated day of the week$/) do 
    #NOTE: It assumes that date is launched with LC_ALL=en_US.UTF-8 as locale 
    day_of_week, day, month, hms, zone, year = last_command_started.output.split 
    days_of_week = %w(Mon Tue Wed Thu Fri Sat Sun) 
    expect(days_of_week).to include(day_of_week) 
end 

Then(/^the output first word should be the current day of the week$/) do 
    day_of_week, day, month, hms, zone, year = last_command_started.output.split 
    expect(day_of_week).to eq(Time.now.strftime('%a')) 
end 

これは、の定義ですまだCucumberには知られていないフィーチャファイル内の文章です。これはRubyファイルなので、Rubyコードはほとんどが内部に書くことができますdoendの間のブロックにあります。 最後のコマンド(ここではbashスクリプト)の出力にStringとしてアクセスして、それにテストを書き込むことができます。 たとえば、この文字列を分割し、すべての部分を新しい変数に割り当てます。週の文字列(たとえば「土」)を覚えたら、expect keywordでテストできます。

試験は強度順に記載されています。あなたが不運な場合、2回目のテストは真夜中を過ぎるかもしれません。独自のテストを書く場合は、他の変数(日、月、時、分、年、年)をStringとして定義しました。

+0

@ EricDuminil-それは良いようです。 use_aruba_with_cucumber.featureとtime_steps.rbにある各行の意味を説明できますか? – kit

+0

私はベストを尽くしました。スクリプトを修正して何が起こるかを調べることができます。あなたは、Googleでcucumber/rspec/ruby​​に関するチュートリアルをたくさん見つけることができます。 –

+0

@ EricDuminil-良い仕事。あなたの努力を感謝します。ありがとう – kit