Я запускаю то, что должно быть основной демонстрацией BDD с использованием Cucumber и Aruba на Windows в Ruby 1.8.7. Идея состоит в том, чтобы простое приложение-приветствие запросило у пользователя имя, а затем передало ему привет по имени.
Сценарии с огурцом выглядят так:
# name_prompt.feature
Feature: Name prompt
In order to interact with the bot
As a friendly user
I want to tell the app my name
Scenario: Be asked
Given the application is running
Then I should see "What is your name?"
Scenario: Talk back
Given the application is running
And I type "Tim" and press Enter
Then I should see "Hello, Tim"
Мои реализации шага используют несколько функций, предоставляемых Aruba, и выглядят так:
# cli_steps.rb
Given /^the application is running$/ do
run_interactive(unescape("ruby chatbot.rb"))
end
Then /^I should see "([^"]*)"$/ do |arg1|
assert_partial_output(arg1)
end
Given /^I type "([^"]*)" and press Enter$/ do |arg1|
type(arg1)
end
Сам бот довольно прост и выглядит так:
# chatbot.rb
$stdout.sync = true
puts "What is your name?"
name = gets.chomp
puts "Hello, #{name}"
В Mac / Linux это работает нормально и проходит все сценарии. Однако в Windows я постоянно вижу, что вывод, проверяемый в assert_partial_output
, не включает последнюю строку («Привет, Тим»).
Я пытался использовать pp
для содержимого @interactive.stdout
, которое должно содержать весь вывод программы, но оно просто содержит первый "Как тебя зовут?" строка плюс разрыв строки.
Есть ли какие-либо проблемы в Windows, которые могли бы вызвать такие проблемы с Cucumber и Aruba? Почему эти тесты не пройдут?