Ember アプリの統合/承認テストを実行しようとしています。具体的には、ユーザー認証 (ログイン フォームの送信など) と、認証されたユーザーを必要とする保護されたページ/状態をテストしています。
私のアプリに関する一般的な注意事項:
- Ember アプリ キットの使用
- 認証にember-simple-authを使用する
- Deviseオーソライザーを使用してヒットするember-simple-authフォームのAPIスタブがあります。これらは、ブラウザー内でアプリを実行するときに正常に機能します。
3 つの問題があります。
1. オーセンティケータとエフェメラル ストレージの工夫
ember-simple-auth API からは、テストにエフェメラル ストレージを使用することを指します。私はそうしました、このように。ただし、セッションはまだローカル ストレージに保存されているようです。各テストで実行しないとlocalStorage.clear()
、最初のテストの後に各テストを実行するときにログインしたままになるため、セットアップ/ティアダウン テストが失敗します。
アプリで Devise オーセンティケーターを使用している場合、各テスト間でセッションをローカル ストレージに保存しないようにすることはできますか?
2. 複数の受け入れテスト
複数のユーザーにログインしようとするとtest()
、テストがスピンオフして無限ループになります。最初のテストはパスしますが、2 番目のテストがログイン フォームを送信すると、テスト スイート全体が停止して再起動します。
統合テスト #1
App = null
module('Acceptance - Page #1',
setup: ->
App = startApp()
teardown: ->
Ember.run(App, 'destroy')
)
test('page #1 behind authentication', ->
expect(1)
visit('/page-1')
fillIn('input#identification', 'foo@bar.com')
fillIn('input#password', 'password')
click('button[type="submit"]')
andThen(->
equal(true, true) # This test works fine
)
)
統合テスト #2
App = null
module('Acceptance - Page #2',
setup: ->
App = startApp()
teardown: ->
Ember.run(App, 'destroy')
)
test('page #2 behind authentication', ->
expect(1)
visit('/page-2')
fillIn('input#identification', 'foo@bar.com')
fillIn('input#password', 'password')
click('button[type="submit"]')
andThen(->
equal(true, true) # Never runs, tests start over, infinite loop begins
)
)
3. EAK api-stubs & Testem
EAK の api- stubs は Testem で使用できないようです。そのため、これらの受け入れテストの「ログイン」プロセスをコマンド ライン/Testem 経由で実行すると失敗します。
sinon.js をセットアップしようとしましたが、上記の問題により、実際に正しく機能しているかどうかを判断できませんでした。ember-simple-auth を使用してユーザーのログインを正常にスタブ化する最良の方法は何ですか? Testem に EAK の API スタブを使用することは可能ですか?