With this commit, we introduce a new 'fail fast' feature to our qunit
test suite: when it is activated, the qunit test suite will immediately
stop after the first failed test.
It is accessible as a flag in the url (failfast), or by clicking the
checkbox in the UI. It is currently not activated by default.
Note that this commit also change the url for the runbot phantomjs test
in order to activate this feature. This allows us to increase the global
timeout for the js test suite without fear!
Backport of 611c836a46
39 lines
1.5 KiB
Python
39 lines
1.5 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
import re
|
|
import odoo.tests
|
|
|
|
RE_ONLY = re.compile('QUnit\.only\(')
|
|
|
|
class WebSuite(odoo.tests.HttpCase):
|
|
|
|
post_install = True
|
|
at_install = False
|
|
|
|
def test_01_js(self):
|
|
# webclient desktop test suite
|
|
self.phantom_js('/web/tests?mod=web&failfast', "", "", login='admin', timeout=1800)
|
|
|
|
def test_02_js(self):
|
|
# webclient mobile test suite
|
|
self.phantom_js('/web/tests/mobile?mod=web&failfast', "", "", login='admin', timeout=1800)
|
|
|
|
def test_check_suite(self):
|
|
# verify no js test is using `QUnit.only` as it forbid any other test to be executed
|
|
self._check_only_call('web.qunit_suite')
|
|
self._check_only_call('web.qunit_mobile_suite')
|
|
|
|
def _check_only_call(self, suite):
|
|
# As we currently aren't in a request context, we can't render `web.layout`.
|
|
# redefinied it as a minimal proxy template.
|
|
self.env.ref('web.layout').write({'arch_db': '<t t-name="web.layout"><t t-raw="head"/></t>'})
|
|
|
|
for asset in self.env['ir.qweb']._get_asset_content(suite, options={})[0]:
|
|
filename = asset['filename']
|
|
if not filename or asset['atype'] != 'text/javascript':
|
|
continue
|
|
with open(filename, 'rb') as fp:
|
|
if RE_ONLY.search(fp.read().decode('utf-8')):
|
|
self.fail("`QUnit.only()` used in file %r" % asset['url'])
|