何时用Cucumber和Rails测试什么

时间:2012-07-24 04:30:01

标签: ruby-on-rails unit-testing rspec cucumber functional-testing

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

如何创建X似乎包含测试用户创建X所需的实际步骤,通常是通过表单。 例如导航到新页面,单击“创建X”链接,填写表单并单击“创建”,然后查看已创建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”并且这是否意味着我不应该使用黄瓜来测试它?

我认为我基本上是在看“我用黄瓜测试什么”,但也许我让它变得更加复杂然后我自己也难以得出结论。你有任何见解都会很棒。

2 个答案:

答案 0 :(得分:1)

您描述为“我如何创建X”的方法更好,因为您正在将用户视角用于测试,这对于Cucumber来说更加自然/受欢迎。

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

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

我希望有所帮助。

答案 1 :(得分:0)

现在我会回答不同的问题。 Cucumber场景应该更像'可以创建X'(我的意思是你的第二个例子),但只使用很少的Ruby代码,RSpec,FactoryGirl的Capybara ...... 由于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