如何在没有浏览器的情况下测试sproutcore应用程序

时间:2011-12-13 11:42:23

标签: ruby-on-rails testing sproutcore automated-tests

我有一个sproutcore应用程序,我想从ant脚本执行测试。该站点与rails应用程序交互,以便在url中发生/ backend时,请求将转到rails服务器。现在当我在命令行输入'sc-server'时,我可以访问测试选项卡。如果rails服务器没有运行,它会抱怨rails应用程序没有运行,所以我必须从rails应用程序执行'rails server',然后我可以通过在浏览器中打开各种url来运行sproutcore应用程序测试,例如{ {3}}

我的问题是:如何在不使用浏览器的情况下执行测试?我可以用什么命令来运行这些测试并在命令行上获得输出?

1 个答案:

答案 0 :(得分:0)

安装https://github.com/ariya/phantomjs phantomjs 然后你可以在启动sproutcre应用程序和rails app

之后运行以下脚本
var allTestsURL = "http://localhost:4020/webedge/en/current/tests.html";
var i, j;
var x = 0, y = 0;
var page = new WebPage();

page.open(allTestsURL, function (status) {
  if (status !== 'success') {
    console.log('Unable to access network');
  }
  window.setInterval(function() {
  var str = "";
  y++;
  var st = page.evaluate(function () {
    str = "";
    if(document.body.querySelector("span.status span.passed")){
      str += "passed: true";
      console.log("str: " + str);
    }
    if (document.body.querySelector("span.status span.failed")){
      str += ";failed: true";
      console.log("str: " + str);
    }
    console.log("returning " + str);
    return str;
  });
    console.log("status returned is " + st);
    if (st == "passed: true") {
      console.log("it all passes! ");
      phantom.exit(0);
    } else if(st.indexOf("failed") > 0){
      console.log("tests have failed");
      phantom.exit(1);
    }
    if(y > 25) {
      console.log("exiting with error as not yet resolved");
      phantom.exit(1);

    }
    }, 2000);
});

注意:sproutcore版本是1.6.0.1,传递的测试出现在span.passed选择器中,如果span.failed选择器中出现任何错误,则测试失败。我没有计算失败的测试;此脚本只检测是否有故障。它并非完全万无一失,但它符合我的目的。没有超时或任何东西,可能应该添加。但我们可以在此基础上继续发展。

sproutcore phantomjs的脚本已被探索,但它对我不起作用。任何想法为什么?