我正试图找到一种方法来测试多项选择题。结构是课程有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
答案 0 :(得分:2)
答案 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
等等。