2

Ruby on Rails 3.2.2 と rspec-rails-2.8.1 を使用しています。たとえば、次のように、実行されるテストに関する詳細情報を出力したいと思います。

# file_name.html.erb
...

# General idea
expected_value = ...

it "... #{expected_value}" do
  ...
end

# Usage that I am trying to implement
expected_page_title =
  I18n.translate(
    'page_title_html'
    :user => @user.firstname
  )

it "displays the #{expected_page_title} page title" do
  view.content_for(:page_title).should have_content(expected_page_title)
end

rspec . --format documentation: 「出力」とは、ターミナル ウィンドウでコマンド ラインを実行したときに出力されるものを意味します。

テストするのは正しい方法ですか?


関連する質問:

4

1 に答える 1

0

あなたの質問はいくつかの意見を求めるものですが、いくつかの例で私の意見を正当化しようとします.

短い答え: いいえ、これは RSpec (または任意のテスト) の記述方法ではありません。これは型にはまらず、余分なコードにあまり価値がありません。

長い答え: RSpec は BDD (動作駆動型開発) ツールであり、自動化されたテストを作成すると同時に、コードの動作と意図を記述するのに役立つように設計されています。コードの動作について考えるとき、期待される結果をテスト記述に追加することは本当に価値があるでしょうか? もしそうなら、おそらくあなたがテストしているものを再考する必要があります.

たとえば、User クラスがあり、ユーザーの姓名を連結するメソッドをテストするとします。

describe User do
  expected_full_name = 'Software Guy'

  subject { User.new(first: 'Software', last: 'Guy') }

  it 'should have the full name #{expected_full_name}' do
    subject.full_name.should == 'Software Guy'
  end
end

VS

describe User do
  subject { User.new(first: 'Software', last: 'Guy') }

  it 'should have a full name based on the first and last names' do
    subject.full_name.should == 'Software Guy'
  end
end

最初のテストでは、期待される結果が説明に含まれていて、本当に得をするものは何ですか? ユーザーの予想される行動について何かを教えてくれますか? あまり。

あなたの例を見てください。私があなたのプロジェクトに来て、そのようなテストの説明を見たら、何がテストされているかを実際に教えてくれないので、混乱するでしょう. 何が起こっているのかを理解するには、コードを確認する必要があります。次の 2 つの例を比較してください。

it "displays the #{expected_page_title} page title" do
  view.content_for(:page_title).should have_content(expected_page_title)
end

コンソールに次のようなものが表示されます。

"My Awesome Title ページのタイトルを表示します"

それを比較してください:

it "should translate the page title" do
  view.content_for(:page_title).should have_content(expected_page_title)
end

これは、コンソールでもテストとまったく同じです。

「ページのタイトルを翻訳する必要があります」

どちらを選択するかは明らかに自由ですが、数年間のテスト経験から言えば、これを行わないことを強くお勧めします。

于 2012-04-07T16:12:47.687 に答える