用于存储正确答案的黄瓜数据表的步骤定义
Step definitions for cucumber data tables for storing correct answers
我正在尝试找到一种方法来测试多项选择题。其结构是一节课有 8 个阶段,每个阶段包含多项选择题,只有一个正确答案。每次加载问题都是随机的,所以我一直在寻找最好的方法来测试是否点击了正确答案。出于这个原因,我创建了一个包含两列的数据 table,这显然比这更广泛,但遵循这些原则:
| what is the opposite of true | false |
| what comes after tuesday | wednesday |
我在功能测试中写到它正在测试正确答案匹配。后来我希望找到一种方法来测试如果问题和答案匹配不在数据 table 中那么它是不正确的。有人能解释一下我将如何为此做测试定义吗?
我尝试使用 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
我觉得rows_hash方法对你有帮助。
def question_correct?(cucumber_table, question, answer)
hash = cucumber_table.rows_hash
return false if hash[question].nil?
return hash[question] == answer
end
该代码通过将两列数据 table 转换为散列来工作,其中第一列是键,第二列是值。
请记住,此方法要求您的数据 table 限于两列。
如果您不尝试使用数据表在 Cucumber 中执行此操作,您会发现这要容易得多。相反,将所有这些细节下推到由步骤定义调用的辅助方法。要开始这样做,您需要编写一个更抽象的功能。
您需要做的第一件事是获得尽可能简单的课程。所以
Given a simple lesson
When I answer the questions correctly
Then I should see I passed the lesson
这是您将用于 'drive' 开发的场景。
您可以通过委托来真正轻松地实施这些步骤,例如
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
这样做是将您的技术问题转移到一个新领域。在这里,您可以使用编程语言的全部功能来做任何您想做的事情:所以您可以做
- 创建有答案的问题并知道正确答案是什么
- 问他们正确答案的问题,这样你就可以正确回答他们
- 向课程中添加问题
...
记住,因为你还在Cucumber::World,你拥有
的全部权力
- 驱动您的浏览器
- 访问您的数据库
...
当你完成这个后,你将有很多工具来编写像
这样的场景
Given a simple lesson
When I answer the questions incorrectly
Then I should see I failed the lesson
等等。
我正在尝试找到一种方法来测试多项选择题。其结构是一节课有 8 个阶段,每个阶段包含多项选择题,只有一个正确答案。每次加载问题都是随机的,所以我一直在寻找最好的方法来测试是否点击了正确答案。出于这个原因,我创建了一个包含两列的数据 table,这显然比这更广泛,但遵循这些原则:
| what is the opposite of true | false |
| what comes after tuesday | wednesday |
我在功能测试中写到它正在测试正确答案匹配。后来我希望找到一种方法来测试如果问题和答案匹配不在数据 table 中那么它是不正确的。有人能解释一下我将如何为此做测试定义吗?
我尝试使用 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
我觉得rows_hash方法对你有帮助。
def question_correct?(cucumber_table, question, answer)
hash = cucumber_table.rows_hash
return false if hash[question].nil?
return hash[question] == answer
end
该代码通过将两列数据 table 转换为散列来工作,其中第一列是键,第二列是值。
请记住,此方法要求您的数据 table 限于两列。
如果您不尝试使用数据表在 Cucumber 中执行此操作,您会发现这要容易得多。相反,将所有这些细节下推到由步骤定义调用的辅助方法。要开始这样做,您需要编写一个更抽象的功能。
您需要做的第一件事是获得尽可能简单的课程。所以
Given a simple lesson
When I answer the questions correctly
Then I should see I passed the lesson
这是您将用于 'drive' 开发的场景。
您可以通过委托来真正轻松地实施这些步骤,例如
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
这样做是将您的技术问题转移到一个新领域。在这里,您可以使用编程语言的全部功能来做任何您想做的事情:所以您可以做
- 创建有答案的问题并知道正确答案是什么
- 问他们正确答案的问题,这样你就可以正确回答他们
- 向课程中添加问题 ...
记住,因为你还在Cucumber::World,你拥有
的全部权力- 驱动您的浏览器
- 访问您的数据库 ...
当你完成这个后,你将有很多工具来编写像
这样的场景Given a simple lesson
When I answer the questions incorrectly
Then I should see I failed the lesson
等等。