2015-05-14 5 views
1

Я пытаюсь найти способ проверить несколько вопросов выбора. Структура состоит в том, что урок состоит из 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

Я думаю, что метод 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 

Код работает путем преобразования данных таблицы два столбца в хэш, где первый столбец является ключом, а второй является значением.

Имейте в виду, что этот метод требует, чтобы таблица данных ограничивалась двумя столбцами.

+0

Это потрясающе спасибо! глядя на аргумент, я должен задать вопрос и ответить в таблице? И где же в нее входит cucumber_table? – Lilp

+0

Параметр cucumber_table - это таблица данных. Итак, определите шаг, например: «Учитывая список пар ответов-значений», за которыми следует таблица данных. Установите переменную экземпляра (например, @question_answer_table), а затем на других шагах вы можете вызвать этот метод с вашей переменной экземпляра в качестве первого параметра. Вам не нужно указывать заголовок вопроса и ответа в таблице. –

+0

По какой-то причине я получаю неопределенный метод хэша строк, вы можете предложить какие-либо предложения? Я отредактировал вышеупомянутый вопрос, включив код – Lilp

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 

и так далее.

Смежные вопросы