[IMP] js testing
authorChristophe Simonis <chs@odoo.com>
Sun, 22 Jun 2014 09:31:07 +0000 (11:31 +0200)
committerChristophe Simonis <chs@odoo.com>
Sun, 22 Jun 2014 09:31:07 +0000 (11:31 +0200)
- output "error" if any qunit tests failed
- failed js tests are logged as errors
- when running phantomjs considere empty waiting condition or initialisation code as "true"
- lint phantomtest.js file

addons/web/views/webclient_templates.xml
openerp/modules/module.py
openerp/tests/phantomtest.js

index 08fc3be..9de0d51 100644 (file)
                         QUnit.done(function(result) {
                             if (result.failed === 0) {
                                 console.log('ok');
+                            } else {
+                                console.log('error');
                             }
                         });
                         openerp.web.qweb.add_template("/web/webclient/qweb");
index 8f34a74..cd21e68 100644 (file)
@@ -384,11 +384,12 @@ class TestStream(object):
         if self.r.match(s):
             return
         first = True
-        for c in s.split('\n'):
+        level = logging.ERROR if s.startswith(('ERROR', 'FAIL', 'Traceback')) else logging.INFO
+        for c in s.splitlines():
             if not first:
                 c = '` ' + c
             first = False
-            self.logger.info(c)
+            self.logger.log(level, c)
 
 current_test = None
 
index 5a6a969..84f886c 100644 (file)
@@ -1,14 +1,15 @@
-// Phantomjs openerp helper
+// Phantomjs odoo helper
+// jshint evil: true, loopfunc: true
 
-function waitFor (ready, callback, timeout, timeoutMessageCallback) {
+function waitFor (condition, callback, timeout, timeoutMessageCallback) {
     timeout = timeout || 10000;
-    var start = new Date;
+    var start = new Date();
 
     (function waitLoop() {
-        if(new Date - start > timeout) {
+        if(new Date() - start > timeout) {
             console.log('error', timeoutMessageCallback ? timeoutMessageCallback() : "Timeout after "+timeout+" ms");
             phantom.exit(1);
-        } else if (ready()) {
+        } else if (condition()) {
             callback();
         } else {
             setTimeout(waitLoop, 250);
@@ -44,7 +45,7 @@ function PhantomTest() {
                 }
                 return result.join('');
             }));
-            msg.push('(leaf frame on top)')
+            msg.push('(leaf frame on top)');
         }
         console.log('error', JSON.stringify(msg.join('\n')));
         phantom.exit(1);
@@ -86,9 +87,9 @@ function PhantomTest() {
     };
     setTimeout(function () {
         self.page.evaluate(function () {
-            var message = ("Timeout\nhref: " + window.location.href
-                + "\nreferrer: " + document.referrer
-                + "\n\n" + (document.body && document.body.innerHTML)).replace(/[^a-z0-9\s~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "*");
+            var message = ("Timeout\nhref: " + window.location.href +
+                           "\nreferrer: " + document.referrer +
+                           "\n\n" + (document.body && document.body.innerHTML)).replace(/[^a-z0-9\s~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, "*");
             console.log('error', message);
             phantom.exit(1);
         });
@@ -107,6 +108,8 @@ function PhantomTest() {
             url_path = "/login?" + qp.join('&');
         }
         var url = self.origin + url_path;
+        code = code || "true";
+        ready = ready || "true";
         self.page.open(url, function(status) {
             if (status !== 'success') {
                 console.log('error', "failed to load " + url);
@@ -115,7 +118,7 @@ function PhantomTest() {
                 console.log('loaded', url, status);
                 // process ready
                 waitFor(function() {
-                    console.log("PhantomTest.run: wait for condition: " + ready);
+                    console.log("PhantomTest.run: wait for condition:", ready);
                     return self.page.evaluate(function (ready) {
                         var r = false;
                         try {