gongo / turnip_formatter

A pretty formatter for Turnip
http://gongo.hatenablog.com/entry/2013/04/18/203426
MIT License
34 stars 24 forks source link

Encoding::CompatibilityError on language:ja feature file #59

Closed kazaoki closed 9 years ago

kazaoki commented 9 years ago

こんにちは。日本語で Issue 書いていいのか分かりませんが・・。

Turnipのfeatureファイルで日本語書式にするため冒頭に# language: jaと書くと、レポート生成時に Encoding::CompatibilityError エラーが出力されます。

[feature file]

# encoding: utf-8
# language: ja
...

[error]

/turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/template/index.slim:87:in `join': incompatible character encodings: US-ASCII and UTF-8 (Encoding::CompatibilityError)
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/template/index.slim:87:in `block in singleton class'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/template/index.slim:-6:in `instance_eval'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/template/index.slim:-6:in `singleton class'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/template/index.slim:-8:in `__tilt_70112817494420'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/tilt-2.0.1/lib/tilt/template.rb:155:in `call'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/tilt-2.0.1/lib/tilt/template.rb:155:in `evaluate'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/tilt-2.0.1/lib/tilt/template.rb:96:in `render'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/printer.rb:11:in `render_template'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/turnip_formatter/printer/index.rb:14:in `print_out'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/rspec/core/formatters/turnip_formatter.rb:34:in `output_html'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/turnip_formatter-0.3.4/lib/rspec/core/formatters/turnip_formatter/for_rspec3.rb:19:in `dump_summary'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:184:in `block in notify'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:183:in `each'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:183:in `notify'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:162:in `block in finish'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:170:in `close_after'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:151:in `finish'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:79:in `report'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:113:in `run_specs'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:89:in `run'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
        from /turnip/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
        from /turnip/vendor/bundle/ruby/2.2.0/bin/rspec:23:in `load'
        from /turnip/vendor/bundle/ruby/2.2.0/bin/rspec:23:in `<main>'

日本語でfeatureファイル書きたいのです・・! http://magazine.rubyist.net/?0042-FromCucumberToTurnip

よろしくご確認お願いします。

gongo commented 9 years ago

@kazaoki さんこんにちは!日本語でも大丈夫ですよ!!日本語大好き!!

Turnipのfeatureファイルで日本語書式にするため冒頭に# language: jaと書くと、レポート生成時に Encoding::CompatibilityError エラーが出力されます。

報告ありがとうございます。のちほど調べてみます :pizza:

本現象が起きた環境ですが、ログにもあるとおり

でよろしいでしょうか。

kazaoki commented 9 years ago

返信ありがとうございます!

root@870c437f947a:/turnip# ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-linux]
root@870c437f947a:/turnip# cat Gemfile.lock | grep turnip
    turnip (1.3.1)
    turnip_formatter (0.3.4)
      turnip (~> 1.3.0)
  turnip
  turnip_formatter

なので、多分

です。 ruby よくわからないです。難しい。。

gongo commented 9 years ago

情報ありがとうございます!

kazaoki commented 9 years ago

↑あー、余計な ref 情報出てますが気にしないでください・・。 こっちにも出ちゃうんだ・・orz

gongo commented 9 years ago

@kazaoki こちらの環境で調べてみたのですが、同様の現象は確認できませんでした。

$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [x86_64-darwin14]

$ bundle list | grep turnip
  * turnip (1.3.1)
  * turnip_formatter (0.3.4)

※ 強いていえば、実行環境が OSX か Linux か、の違いでしょうか…

試しに @kazaoki さんの環境で以下の手順で試してもらってよろしいでしょうか。

  1. とりあえず turnip_formatter もってくる

    $ git clone https://github.com/gongo/turnip_formatter.git
    $ cd turnip_formatter
    $ bundle install --path vendor/bundle
  2. 以下の内容で turnip_formatter/example/spec/features/battle.ja.feature に保存

    # encoding: utf-8
    # language: ja
    
    機能: Battle a monster
    
    シナリオ: normal monster
     前提 there is a monster
     もし I attack it
    ならば it should die
     かつ Fanfare
    
    シナリオ: strong monster
     前提 there is a strong monster
     もし I attack it
    ならば it should die
     かつ Fanfare
  3. 実行してみる

    $ cd turnip_formatter/example
    $ bundle exec rspec spec/features/battle.ja.feature

ここで、私は Encoding::CompatibilityError 出ずに

2 examples, 1 failure

となりました(正常に動いている)

レポートもこんな感じに

2015-08-12 21 03 04

kazaoki commented 9 years ago

@gongo 様 ご丁寧なご連絡ありがとうございます! 当方は、Linux(CentOS7)上のdocker(公式Rubyイメージ:debian)を実行環境としています。 docker上で上記のコマンドを実行してみたのですが、ArgumentErrorという別のエラーが出ております。。 また、report.htmlは作成されますが、0byteです。

$ docker run -it ruby:2.2.2 bash
# git clone https://github.com/gongo/turnip_formatter.git
# cd turnip_formatter
# bundle install --path vendor/bundle
# cd example/spec/features/
# curl -LO http://kazaoki.jp/turnip-test/battle.ja.feature
# cd /turnip_formatter/example
# bundle exec rspec spec/features/battle.ja.feature
.F

/turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/exception_presenter.rb:53:in `strip': invalid byte sequence in US-ASCII (ArgumentError)
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/exception_presenter.rb:53:in `failure_slash_error_line'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/exception_presenter.rb:93:in `failure_lines'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/exception_presenter.rb:28:in `colorized_message_lines'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/exception_presenter.rb:139:in `formatted_message_and_backtrace'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/exception_presenter.rb:48:in `fully_formatted'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/notifications.rb:200:in `fully_formatted'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/notifications.rb:114:in `block in fully_formatted_failed_examples'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/notifications.rb:113:in `each'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/notifications.rb:113:in `each_with_index'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/notifications.rb:113:in `fully_formatted_failed_examples'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/formatters/base_text_formatter.rb:33:in `dump_failures'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:184:in `block in notify'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:183:in `each'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:183:in `notify'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:155:in `block in finish'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:170:in `close_after'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:151:in `finish'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/reporter.rb:79:in `report'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:113:in `run_specs'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:89:in `run'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:73:in `run'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/lib/rspec/core/runner.rb:41:in `invoke'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/gems/rspec-core-3.3.2/exe/rspec:4:in `<top (required)>'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/bin/rspec:23:in `load'
        from /turnip_formatter/vendor/bundle/ruby/2.2.0/bin/rspec:23:in `<main>'

足りない何かがあるんでしょうか。。 dockerなので @gongo 様の方でも全く同じ結果が確認できると思いますので、お手数をお掛け致しますがよろしくお願いします。

※ちなみに、実際にEncoding::CompatibilityErrorが出た開発環境は公式rubyイメージではなく、別のdockerコンテナ(debianイメージ上のrenv)ですが、rubyやturnipのバージョンは同様で、こちらも上記コマンドを実行すると同じくArgumentErrorが出ます。 → https://hub.docker.com/r/kazaoki/spec/~/dockerfile/

とっても素敵なレポートツール、どうしてもLinux上で生成させたいです・・!!

gongo commented 9 years ago

私も ruby:2.2.2 イメージで試してみましたが、同様の現象を確認できました。 そして、おそらく locale ja_JP.UTF-8 が生成されてないからかな、と思われます。

bundle exec .. の前に以下のコマンドを試してみてください。

# apt-get update
# apt-get install locales
# echo "ja_JP.UTF-8 UTF-8" >> /etc/locale.gen
# /usr/sbin/locale-gen ja_JP.UTF-8
# /usr/sbin/update-locale LANG=ja_JP.UTF-8
# export LANG=ja_JP.UTF-8
# export LC_ALL=ja_JP.UTF-8

このあとにテスト実行すると、ArgumentError は出ず、レポートも作成されてるっぽいです!

kazaoki commented 9 years ago

返事が遅れてスイマセン・・! おっしゃるように上記のコマンドを実行したらうまくいくようになりました!レポートも無事生成されています! 本当にありがとうございます!

引き続き gnawrnip の方を試してます今。 かなり素敵ですこれ!

gongo commented 9 years ago

無事うまくいってよかったです! ひとまずこの issue はクロ〜ズしますね。また何かあれば!!