黄瓜测试 - 选择哪种语法来测试单选按钮选择?

cucumber test - Which syntax to choose to test a radio button selection?

我目前对编码和学习 Ruby 和 Sinatra 还很陌生。 我已经开始为我尝试导出到网络的终端开发剪刀石头布游戏,并使用黄瓜来测试其网络功能。

我有一个与 erb 文件集成的网络功能,有趣的是,它在网络上工作,但我找不到真正让它通过并显示它工作的黄瓜网络 steps/syntax。我想以正确的方式编写代码,因此希望我的测试能够在我继续使用新功能之前实际工作。

我的 options.erb 文件有这些行:

<form action="game_play">
  <fieldset>
    Which game do you want to play?<br><br>
    <input type="radio" name="type" value="RPS" checked>Rock Paper Scissors<br>
    <input type="radio" name="type" value="RPSSL">Rock Paper Scissors Spock Lizard
    <br><br>
    <input type="submit" value="PLAY!">
  </fieldset>
</form>

我的 Sinatra 服务器包括以下内容

get '/game_play' do
  @type = params[:type]
  erb :play
end

而在play.erb页面中,石头剪刀布自动显示,但只有这个if语句

<% if @type == "RPSSL" %>

允许斯波克和蜥蜴出现。在 web 中,如果我 rackup 并继续 localhost:9292,它会起作用;只有 selecting RPSSL 允许在下一页看到 spock 和 lizard。

这些黄瓜测试

Scenario: Choosing a RPS type of game
  Given I am on the options page
  When I check "Rock Paper Scissors" within "type"
  And I press "PLAY!"
  Then I should see "Rock"
  But I should not see "Spock"

Scenario: Choosing a RPSSL type of game
  Given I am on the options page
  When I check "Rock Paper Scissors Spock Lizard" within "type"
  And I press "PLAY!"
  Then I should see "Rock"
  And I should see "Spock"

不工作。第一个实际上通过了,因为默认情况下会检查 RPS,但检查可能不是正确的黄瓜语法。我尝试使用 select、选择,甚至填写,但尽管在网上花了很长时间,还是找不到单选按钮的正确黄瓜语法。有人能帮忙吗?谢谢

好吧,有一件事是你真的应该删除websteps并编写自己的,但是让我们看一下支持检查websteps的代码:

https://github.com/GBouffard/rps-challenge/blob/master/features/step_definitions/web_steps.rb#L76

When /^(?:|I )check "([^\"]*)"(?: within "([^\"]*)")?$/ do |field, selector|
  with_scope(selector) do
    check(field)
  end
end

你也应该告诉我们你得到的实际错误,但我怀疑你的黄瓜步骤 When I check "Rock Paper Scissors Spock Lizard" within "type" 实际的复选框标签中有一些错误标签。

我会用 byebug 攻击这种问题,以检查是否抓取了正确的 HTML 元素...

好的,所以开始使用 byebug 并深入研究水豚源代码,我想我已经修复了它。如果你看一下关于如何使用 'radio buttons' 的水豚测试,这就是你在这里使用的,你需要这样的东西

<td><input type="radio" name="type" value="RPS" id="RPS" class="regular-checkbox" checked />
<label for="RPS">Rock Paper Scissors</label><br><br><img src="/images/rps_button.jpg"></td>
<td><input type="radio" name="type" value="RPSSL" id="RPSSL" class="regular-checkbox"/>
<label for="RPSSL">Rock Paper Scissors Lizard Spock<br><br><img src="/images/rpssl_button.jpg"></td>   

并且您需要按如下方式更新您的场景,以确保您是 "choosing" "radio button" 而不是 "checking it"

  Scenario: Choosing a RPS type of game
    Given I am on the homepage
    When I fill in "name" with "Guillaume"
    And I press "START"
    And I choose "Rock Paper Scissors"
    And I press "PLAY!"
    Then I should see "Rock"
    But I should not see "Spock"

  Scenario: Choosing a RPSSL type of game
    Given I am on the options page
    When I choose "Rock Paper Scissors Spock Lizard"
    And I press "PLAY!"
    Then I should see "Rock"
    And I should see "Spock"