yujiro's blog

webエンジニアをしています。

Capybara Poltergeist で TypeError: undefined is not a function (evaluating 'Object.assign〜 というエラーが発生した

今まで poltergeist のオプションに js_errors: false を設定していたんだけど、

とある所で詰まって色々調べるために、true にしたら全く動かなくなった。


テストを実行したら下記のエラーが出力された。

TypeError: undefined is not a function (evaluating 'Object.assign(hoge, fuga)')


すぐ、こちらのぺーじを見つけて

https://github.com/es-shims/es5-shim/blob/master/es5-shim.js

からソース落としてきて

application.js に

//= require es5-shim

を入れたんだけど、またもや同じエラーがおきた。


調べたところ

Object.assign は ES6 の構文らしい。


なので

https://raw.githubusercontent.com/paulmillr/es6-shim/master/es6-shim.js

から同じようにソースを落っことしてきて

//= require es6-shim

としたら動いた。


ちなみに 調べてる過程で見つけたんだけど、apt-get で phantomjs をいれるのはよくないらしい。

下記手順でいれなおした

$ sudo apt-get install npm nodejs nodejs-legacy

$ npm install -g phantomjs

$ phantomjs -v

=> 2.1.1


ちなみに capybara の poltergeist の設定で phantomjs_logger 設定すると console.log したものを吐き出してくれるのでかなり便利だった。

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, { debug: true, js_errors: true, phantomjs_logger: File.open("#{Rails.root}/log/test_phantomjs.log", "a")} )
end

参考

CapybaraでReactをテストしようとしたらエラーになった件

PhantomJS を Ubuntu 16.04 LTS にインストールする