###前提・実現したいこと
Ruby+Rspec+Turnipを使って、標準入力および出力のテストをしたい。
よろしくお願いいたします。
###発生している問題・エラーメッセージ
Turnipフェーズで、入力待ちになってしまうが、入力待ちにならないようにしたい。
$ bundle exec rspec Turnipフェーズ: 標準入力から文字列を受け取る 標準入力から文字列を受け取る
###該当のソースコード
stdinput.feature
Gherkin
1#language: ja 2 3機能: Turnipフェーズ: 標準入力から文字列を受け取る 4 5 標準入力から文字列を受け取る 6 7 シナリオ: 標準入力から文字列を受け取る 8 前提 標準入力に文字列が入力されるとする 9 もし 標準入力から文字列を受け取る 10 ならば その文字列は "abc" である
stdinput_steps.rb
ruby
1# coding: utf-8 2require "stdinput" 3 4step "標準入力に文字列が入力されるとする" do 5 @smbl = Stdinput::GetString.new 6 @smbl.getstr 7end 8 9step "標準入力から文字列を受け取る" do 10 @msg = @smbl.str 11end 12 13step "その文字列は :greeting である" do |greeting| 14 expect(@msg).to be == greeting 15end
stdinput_spec.rb
ruby
1require 'spec_helper' 2require "stdinput" 3 4module Stdinput 5 describe "RSpecフェーズ: GetString" do 6 let(:s) { GetString.new } 7 before do 8 allow(s).to receive(:gets).and_return("abc") 9 s.getstr 10 end 11 12 context "#getstr" do 13 it { expect(s.str).to be == "abc" } 14 end 15 16 context "#prtstr" do 17 it { expect { s.prtstr }.to output("abc\n").to_stdout } 18 end 19 end 20end
stdinput.rb
ruby
1module Stdinput 2 class GetString 3 attr_reader :str 4 5 def initialize 6 @str = nil 7 end 8 9 def getstr 10 @str = gets.chomp 11 end 12 13 def prtstr 14 puts @str 15 end 16 end 17end
###補足情報(言語/FW/ツール等のバージョンなど)
shell
1$ ruby -v 2ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-linux] 3 4$ rspec -v 5RSpec 3.6 6 - rspec-core 3.6.0 7 - rspec-expectations 3.6.0 8 - rspec-mocks 3.6.0 9 - rspec-support 3.6.0 10 11$ gem list turnip 12*** LOCAL GEMS *** 13turnip (3.0.0)
あなたの回答
tips
プレビュー