2017-03-16 8 views
0

私はチケットを記載したアプリを持っています。 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と入力すると、出力されます。しかし、プロミスは解決されていません。

答えて

0

私の問題は、私のページネーションヘッダー(x-total-countx-per-page)でわかりました。それらをStringに変換することは、そのトリックを行います。変わった部分は、テスト環境ではなく、開発中に正常に機能していたことです。誰もが将来的にこの問題を持っているのであれば、私の場合は解決されました:ヘッダを割り当てる際に呼び出される

def index 
    @tickets = apply_scopes(@tickets) 
    response.headers['x-total-count'] = @tickets.total_count.to_s 
    response.headers['x-per-page'] = Ticket.default_per_page.to_s 
end 

お知らせ.to_s

関連する問題