1

Cucumber と Ruby on Rails でテストを書いているとき、私は常にこの質問を自問しています。「X を作成する方法」と「X を作成できるか」をいつテストするか

「X を作成するにはどうすればよいですか」には、ユーザーが X を作成するために必要な実際の手順 (通常はフォームを使用) のテストが含まれているようです。新しいページに移動し、「create X」リンクをクリックし、フォームに入力して create をクリックすると、X が作成されたことがわかります。

別の「x を作成できますか」は、システム、モデル、およびコントローラーが X を作成する能力を処理するかどうか、つまり、それらが適切に配線されているかどうかです。

通常、これらのシナリオの両方をテストしますか? サイド プロジェクトの Q&A パートを書き始めたばかりで、テストを次のように書くかどうかを決めることができませんでした (背景を削除しました。背景は少し長いです)。

When I click "Ask the seller a question"
And I fill out the form with a question and submit the form
Then I should see that the question has been created
And the user that posted the job has been notified

それとももっと似ているべきですか

When I ask the seller a question
Then I should see that the question has been posted
And the user that posted the job has been notified

違いは、フォームまたはファクトリを介して作成するかどうかですよね? Rspec はどこで機能するのでしょうか。「X を作成できますか」をテストする必要があると思います。それは、キュウリを使用してそれをテストするべきではないということですか?

私は本質的に「きゅうりで何をテストするのか」を見ていると思いますが、これをもっと複雑にしているのかもしれませんが、自分で結論を出すのに苦労しています。あなたが持っている洞察は素晴らしいでしょう。

4

2 に答える 2

1

「Xを作成するにはどうすればよいですか」と説明したアプローチは、テストにユーザーの視点を取り入れているため、より優れています。これは、キュウリにとってより自然で人気のあるものです。

また、このアプローチは、ドキュメントの観点から優れています->「期待されるもの」ではなく、何かがどのように機能するかを説明します。したがって、リフレッシュが必要な場合、またはプロジェクトに新しい開発者がいる場合は、シナリオを読むことができます。

ここでユーザーパースペクティブテストについて少し読むことができます:http ://www.businesstechnologyarticles.eu/testing-the-user-perspective-with-ruby-on-rails

それがお役に立てば幸いです。

于 2012-07-24T10:15:59.837 に答える
0

今の私は違う答えをします。Cucumber のシナリオは、「X を作成できますか」(2 番目の例を意味します) に似ているはずですが、Ruby コード、RSpec、FactoryGirl をほとんど使用しないステップでカピバラのみを使用します... Web_steps が Cucumber から削除されたため、誘惑されるべきではありませんそのようなステップを書くには:

When I click "Ask the seller a question"
And I fill out the form with a question and submit the form

これは本当に悪いアプローチです。

2番目の例ははるかに優れています

When I ask the seller a question
Then I should see that the question has been posted
And the user that posted the job has been notified

詳細には触れずに、一般的なアイデアについて説明します

しかし、「X を作成するにはどうすればよいか」に関するすべての詳細を含む、主に Capybara の手順を記述する必要があります。

例:

When(/^I ask the seller a question$/) do
  click_link 'Ask the seller a question'
  fill_in 'my_form', with: 'My question'
  click_button 'Submit'
end

Then(/^I should see that the question has been posted$/) do
  expect(page).to have_selector '.alert', text: 'New question has been posted.'
  expect(page).to have_content 'Question: My question'
end
于 2014-03-18T10:01:46.187 に答える