短編小説: レタスとトゲを使って django アプリの機能テストを書いています。ステップ呼び出しでの同期の欠如により、シナリオは失敗します。
質問: ステップに人為的な待ち時間を追加せずに、このエラーが発生しないようにする方法はありますか?
長い話: このシナリオでは、既存のユーザーがログインできるかどうかを確認します。
Scenario: User exists as admin
Given I access the url "/login/"
And The user "someuser" with password "something" exists as admin
When I fill username with "someuser" and password with "exists"
And I submit the form
Then I see the paragraph "You're successfully logged in!"
ここでの重要なステップは次のとおりです。
@step(r'I see the paragraph "(.*)"')
def see_paragraph(step, text):
assert text in world.browser.html
レタス機能を収穫すると、ランダムに失敗します。
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/lettuce/core.py", line 143, in __call__
ret = self.function(self.step, *args, **kw)
File "/vagrant/src/enext/apps/auth/features/authentication-steps.py", line 21, in see_paragraph
assert text in world.browser.html
AssertionError
デバッグしようとすると、応答を出力すると毎回動作することがわかったので、エラーを再現できませんでした。一時停止を追加することもうまくいくようです。
@step(r'I see the paragraph "(.*)"')
def see_paragraph(step, text):
# print world.browser.html.encode('utf-8')
# either the next or the previous line fixes it
time.sleep(0.3)
assert text in world.browser.html
最初は、テスト データベースのフラッシュに関連しているように見えましたが、他のシナリオとフラッシュも削除したところ、引き続き発生しました。