用于存储正确答案的黄瓜数据表的步骤定义

时间:2015-05-14 16:30:46

标签: ruby cucumber capybara

我正试图找到一种方法来测试多项选择题。结构是课程有8个阶段,每个阶段包含多个选择题,只有一个正确的答案。问题的加载每次都是随机的,因此我一直在寻找测试是否点击了正确答案的最佳方法。出于这个原因,我创建了一个包含两列的数据表,这显然比这更广泛,但是沿着以下几行:

| what is the opposite of true | false        |
| what comes after tuesday     |  wednesday   |

在功能测试中,我写过它正在测试正确的答案匹配。后来我希望找到一种方法来测试,如果问题和答案匹配不在数据表中那么它是不正确的。有人能够解释我将如何为此做测试定义吗?

我尝试使用rows_hash方法,但是我收到以下错误

 undefined method `rows_hash' for -3634850196505698949:Fixnum (NoMethodError)

Given(/^a list of answer\-value pairs$/) do |table|
    @question_answer_table = hash
end

When(/^I choose a match$/) do
  hash = @question_answer_table
  @question_answer_table.rows_hash
  return false if hash[question].nil?
  return hash[question] == answer
end

2 个答案:

答案 0 :(得分:2)

我认为rows_hash方法可以帮助您。

--privileged

代码的工作原理是将两列数据表转换为散列,其中第一列是键,第二列是值。

请注意,此方法要求您的数据表限制为两列。

答案 1 :(得分:1)

如果您不尝试使用数据表在Cucumber中执行此操作,您会发现这更容易。而是将所有细节推送到步骤定义调用的辅助方法。要开始这样做,您需要编写更抽象的功能。

您需要做的第一件事就是让最简单的课程可以使用。所以

Given a simple lesson
When I answer the questions correctly
Then I should see I passed the lesson

这是您用来驱动'你的发展。

您可以通过委派来轻松实现这些步骤。

Given "a simple lesson" do
  @lesson = create_simple_lesson
end

When "I answer the questions correctly" do
  answer_questions lesson: @lesson
end

Then "I should see I passed the lesson" do
  expect(page).to have_content "You passed"
end

要实现这一点,您必须实施一些辅助方法

module QuestionaireStepHelper
  def create_simple_lesson
    ...

  def answer_questions lesson: nil
    ...


end
World QuestionaireStepHelper

这样做会将您的技术问题转移到新域名中。在这里,您可以使用编程语言的全部功能来执行任何操作:因此您可以执行

之类的操作
  • 创建有答案并且知道正确答案是什么的问题
  • 询问问题是否正确答案,以便您正确回答
  • 在课程中添加问题 ...

请记住,因为你仍然在黄瓜::世界,你有充分的力量

  • 驾驶您的浏览器
  • 访问您的数据库 ...

完成此操作后,您将拥有许多工具来编写

等方案
Given a simple lesson
When I answer the questions incorrectly
Then I should see I failed the lesson

等等。