1

当我在 Cucumber 和 Ruby on Rails 中编写测试时,我一直在问自己这个问题。我什么时候测试“我如何创建 X”与“可以创建 X”

我如何创建 X 似乎包括测试用户创建 X 所需的实际步骤,通常是通过表单。比如导航到新页面,点击“create X”链接,填写表格点击create,就可以看到X已经创建好了。

另一种选择,“可以创建 x”,是系统、模型和控制器是否处理创建 X 的能力,也就是它们是否正确连接。

我通常会测试这两种情况吗?我刚刚开始为我的业余项目写一个问答部分,并且无法决定是否编写类似的测试(我已经删除了背景,它们有点长)

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”,这是否意味着我不应该使用 cucumber 来测试它?

我想我本质上是在看“我用黄瓜测试什么”,但也许我让这件事变得更复杂,但我自己无法得出结论。你有任何见解都会很棒。

4

2 回答 2

1

您描述为“我如何创建 X”的方法更好,因为您从用户角度进行测试,这对 Cucumber 来说更自然/更受欢迎。

此外,从文档的角度来看,这种方法更好 - >您描述了某些东西是如何工作的,而不是“预期的”。因此,如果您需要茶点或项目中有新开发人员 -> 您或他可以只阅读一个场景。

您可以在此处阅读有关用户视角测试的一些信息:http ://www.businesstechnologyarticles.eu/testing-the-user-perspective-with-ruby-on-rails

我希望这会有所帮助。

于 2012-07-24T10:15:59.837 回答
0

现在我会以不同的方式回答。Cucumber 场景应该更像是“可以创建 X”(我的意思是您的第二个示例),但仅使用 Capybara 在步骤中使用很少的 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

这是一个非常糟糕的方法。

第二个例子好多了

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

它更多地是关于总体思路而不涉及细节

但是您应该主要编写 Capybara 步骤,其中将包含有关“我如何创建 X”的所有详细信息。

例子:

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 回答