LoginSignup
2
1

More than 5 years have passed since last update.

rspec-modeでrspecを実行する時だけエラーが起きた時

Posted at

コマンドラインからrspecを走らせても、エラーにならず、rspec-modeのrspec-verify-singleとかから起動する時だけエラーになっちゃう時がありました。

背景

テストはこんな感じ。turnipのfeatureです。

やってることは

  1. Twitte.updateメソッドをtweetするんじゃなくて、標準出力するように偽装する
  2. 標準出力をStringIOのインスタンスに書き換ええる
  3. テストでtweetの内容( stdout )と期待値を確認する
  4. afterでオリジナルの標準出力に戻す

ということをしています。

spec_helper.rb
RSpec.configure do |config|
  config.before(:each) do
    allow(Twitter).to receive(:update) {|tweet| puts tweet}
    @orig_stdout = $stdout
    $stdout = @stringio = StringIO.new
  end

  config.after(:each) do
    $stdout = @orig_stdout
  end
end
bot.feature
シナリオ: botコマンド
  前提 日時が "2013-07-30 19:00" となっていること
  ならば "あつきものむかし大坂夏御陣  夏目漱石" とつぶやかれていること
global_steps.rb
step ":tweet とつぶやかれていること" do |tweet|
  expect($stdout.string.chomp).to eq tweet
end

backtraceはこんな感じ。

bundle/ruby/2.1.0/gems/rspec-core-3.1.7/lib/rspec/core/notifications.rb:226:in `strip': invalid byte sequence in US-ASCII (ArgumentError)

対処

調べるとrspec-verify-singleとかした時だけ、 Encoding.default_externalUS-ASCII になっていた。
なので

spec_helper
RSpec.configure do |config|
  Encoding.default_external = Encoding::UTF_8
end

と追加してあげればok。

追記

そもそもturnipのfeatureをrspec-verifyってできないのですが、emacsで独自関数を作っています。 私のconfigファイル

多分、発生している原因はemacs内でrubyを起動すると Encoding.default_externalEncoding:US-ASCII になっているのが原因なので、turnipを介しているのが原因ではないと思います。
根本解決はemacs内での環境変数LANGをちゃんと指定するのかなぁ。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1