【问题标题】:A "strange" (maybe "extreme" or "crazy") approach to test by using Cucumber使用 Cucumber 进行测试的“奇怪”(可能是“极端”或“疯狂”)方法
【发布时间】:2012-03-21 14:39:47
【问题描述】:

我正在使用 Ruby on Rails 3.2.2、cucumber-rails-1.3.0、rspec-rails-2.8.1、capybara-1.1.2 和 factory_girl-2.6.3。我有一个测试用户注册的场景,如下所示:

Scenario: I register an user
  When I fill in "Name" with "Foo"
  And I fill in "Email" with "foo_bar@email.com"
  And I fill in "Password" with "test_password"
  And I click button "Register"
  Then I should be redirected to the homepage

并且我正在尝试声明一个新功能(在一个单独的文件中)在哪里实现一个场景,通过使用令牌,应该测试已注册的用户确认过程是否正确完成(注意:实际上,此过程涉及发送电子邮件,但我确实想测试该电子邮件是否已发送;对于这个问题,请忽略它)。由于我想专门测试确认过程,我想实现一个新的功能/场景,在其中声明Given I am a registered user 之类的内容以运行Scenario: I register an user

Scenario: I confirm an user
  Given I am a registered user # Here I would like to run the 'Scenario: I register an user'
  When I go to the confirmation page
  And I enter the confirmation token
  Then ...

简而言之,我想在另一个场景中调用整个场景

即使我可以使用 FactoryGirl gem 来“创建”-“注册”用户,我还是更愿意继续使用上述方法,因为我会测试(“实际上”来说,那些“代表”“隐形人” ,由 Selenium gem 管理,打开我的浏览器并执行操作)尽可能地表现得像“真人”的行为,因此这些测试步骤隐含地遵循应该在现实中进行的所有“真实”步骤以进行签名了一个新用户。通过遵循这种方法,我可以测试应用程序“内部”是否正常工作。

这是一个正确的方法吗?如果不是,我该如何/应该如何进行?

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 testing cucumber


    【解决方案1】:

    设计良好的测试的一个原则是,您可以以各种形式运行特定功能,但除此之外,假定它在执行其他功能的其他测试的上下文中工作。也就是说,一旦您测试了用户可以注册,您不应该重新测试相同的东西,除非您以不同的方式进行测试。

    “鉴于我是注册用户”这句话表示用户已经成功注册。此时您不应进行测试注册,因为这超出了您尝试执行的测试范围。

    每个测试都应该有一个授权,并且应该坚持下去。如果您不限制自己,您的测试将陷入无用的相互依赖的混乱局面,其中更改一件事需要更改与之相关的所有其他内容。

    【讨论】:

      【解决方案2】:

      在一个步骤中运行场景的语法是:

      Given /^I authenticate successfully$/ do
        Given 'I am on the login page'
        And 'I fill in "Email" with "eddie@hotmail.com"'
        And 'I fill in "Password" with "secret"'
        When 'I press "Login"'
        Then 'I should see "Welcome"'
      end
      

      最后的想法:一般来说,不要让你的功能文件有任何“填充”——只要它描述动作,让你的步骤来做脏活。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多