私はチケットを記載したアプリを持っています。 AngularJSを使用します。RspecとPhantomJSを使ってRails + AngularJSアプリをテストするときに奇妙なエラーが発生する
def index
@tickets = apply_scopes(@tickets)
response.headers['x-total-count'] = @tickets.total_count
response.headers['x-per-page'] = Ticket.default_per_page
end
角度コントローラ(CoffeeScriptの):私はレコードを取得するためにangular-rails-resourceを使用してい
$scope.fetch = ->
Ticket.query($scope.search).then (response) ->
$scope.tickets = response.data
$scope.totalCount = response.headers('x-total-count')
$scope.perPage = response.headers('x-per-page')
$scope.fetch()
ここでは、コントローラのアクションです。私が手でテストするとすべてがスムーズに動作します。ここで
は仕様です:let(:user) { create :user }
scenario 'User lists tickets', js: true do
login_as user, scope: :user
ticket = create :ticket, user: user
visit root_path
click_on 'Support Requests'
expect(page).to have_content(ticket.subject)
end
私はこの仕様を実行すると、条件が満たされていなかったので、私は普通のRSpecの失敗メッセージを得るが、それは持っている必要があります。
expected to find text "ticket 000" in...
Iをそれは並行性と関係があり、CapybaraはAngularがレコードを取得して表示するのを待たずにいると考えました。それから私は先に進み、それをテストするために期待したところのすぐ上にsleep 2
を追加しました。私はそれを行うと、私は別のエラーが表示されます。ここでは
Capybara::Poltergeist::JavascriptError:
One or more errors were raised in the Javascript code on the page. If you don't care about these errors, you can ignore them by setting js_errors: false in your Poltergeist configuration (see documentation for details).
Possibly unhandled rejection: {"data":"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<HTML>\n <HEAD><TITLE>Internal Server Error</TITLE></HEAD>\n <BODY>\n <H1>Internal Server Error</H1>\n undefined method `split' for 1:Fixnum\n <HR>\n <ADDRESS>\n WEBrick/1.3.1 (Ruby/2.3.3/2016-11-21) at\n 127.0.0.1:54674\n </ADDRESS>\n </BODY>\n</HTML>\n","status":500,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"/tickets","params":{},"headers":{"Accept":"application/json","Content-Type":"application/json"},"data":{}},"statusText":"Internal Server Error "}
Possibly unhandled rejection: {"data":"<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\">\n<HTML>\n <HEAD><TITLE>Internal Server Error</TITLE></HEAD>\n <BODY>\n <H1>Internal Server Error</H1>\n undefined method `split' for 1:Fixnum\n <HR>\n <ADDRESS>\n WEBrick/1.3.1 (Ruby/2.3.3/2016-11-21) at\n 127.0.0.1:54674\n </ADDRESS>\n </BODY>\n</HTML>\n","status":500,"config":{"method":"GET","transformRequest":[null],"transformResponse":[null],"jsonpCallbackParam":"callback","url":"/tickets","params":{},"headers":{"Accept":"application/json","Content-Type":"application/json"},"data":{}},"statusText":"Internal Server Error "}
at http://127.0.0.1:54674/assets/application-713835b1641be632b29f7502c00a879e171bca5d6d06a5f264afcd819c123e76.js:14363
は私のスタックです:
- レール(5.0.2)
- カピバラ(2.12.1)
- ポルターガイスト(1.13 .0)
- RSpecのコア(3.5.4)
- phantomjs 2.1.1
追加情報:
- 右のコントローラのアクションを終了する前に、I出力が何かした場合、それが出力されます。実行は全体のアクションを実行しています。
- チケットを取得する直前にI
console.log
と入力すると、出力されます。しかし、プロミスは解決されていません。