ぼろぼろ平原

困った

RSpecで「while line = gets」をテストする方法

RSpecwhile line = getsのような標準入力のループをテストしたいとき。

Kernel.#getsARGFをレシーバとしたメソッドの省略形なので、ARGF.getsをモックにすれば良い。

テストしたいコード:

# 標準入力を行ごとに区切って配列にするメソッド
def foo
  ary = []
  while line = gets
    ary << line.chomp
  end
  ary
end

テストコード:

require "rspec"
require "stringio"
require_relative "foo"

describe "foo" do
  it "標準入力を行ごとに区切って配列にする" do
    inputs = StringIO.new("line1\nline2\n")
    allow(ARGF).to receive(:gets) { inputs.gets }
    expect(foo).to contain_exactly("line1", "line2")
  end
end

rbenvのインストールにはrbenv-installerを使おう(追記:使わない方がいい)

追記:2018-05-15

rbenv-installerは以前とは別物になりました。 もはやrbenv-installerを使うメリットはありません。

追記終わり。あとは古い内容。


rbenv-installerを使うとrbenvとプラグインを同時に導入できる。

ruby-buildなどを入れたりする必要がなくなる。

https://github.com/fesplugas/rbenv-installer

https://github.com/fesplugas/rbenv-installer

rbenv-installerを使ったrbenvのインストール

以下のコマンドでrbenv本体とruby-buildrbenv-default-gemsrbenv-gem-rehashrbenv-updateなどのプラグインが一発でインストールされる。

$ curl https://raw.githubusercontent.com/fesplugas/rbenv-installer/master/bin/rbenv-installer | bash

以下のコードを~/.bash_profile~/.bashrcに追記してbashを再起動するとrbenvが使えるようになる。

# rbenv
export RBENV_ROOT="${HOME}/.rbenv"
if [ -d "${RBENV_ROOT}" ]; then
  epxport PATH="${RBENV_ROOT}/bin:${PATH}"
  eval "$(rbenv init -)"
fi

rbenv-installerで入るプラグイン一覧

個々の紹介はしないけどrbenv-installerを使うとこれらがすべて使えるようになる。

  • rbenv-bootstrap
  • rbenv-default-gems
  • rbenv-gem-rehash
  • rbenv-update
  • rbenv-use
  • rbenv-vars
  • rbenv-whatis
  • ruby-build