4

我正在测试一个 Backbone Marionette 应用程序。测试页面由以下脚本组成:

  • 茉莉花:<script src="../testing/lib/jasmine-1.3.1/jasmine.js"></script>
  • Jasmine HTML 记者:<script src="../testing/lib/jasmine-1.3.1/jasmine-html.js"></script>
  • 我的规格:<script src="js/app.spec.js"></script>
  • 设置:window.onload 代码完全从 Jasmine github 页面复制

奇怪的是,我不断收到此错误:

Uncaught TypeError: Cannot read property 'SuiteView' of undefined 

我查看了堆栈跟踪。jasmine.HtmlReporter准备好在所有测试完成后输出测试摘要。它调用jasmine.HtmlReporterHelpers.appendToSummary, where jasmine.HtmlReporteris undefined,如下面的截图所示。

对象方法无法找到自己。这怎么可能发生?

4

1 回答 1

0

未捕获的类型错误:无法读取未定义的属性“SuiteView”

SuiteView是当前正在执行的套件的一个属性,在这种情况下是缺失的。Jasmine 具有以下生命周期:

var jasmineEnv = jasmine.getEnv (); //Initialize Environment
jasmineEnv.updateInterval = 1000;
var htmlReporter = new jasmine.HtmlReporter (); //Initialize Reporter
jasmineEnv.addReporter (htmlReporter); //Add Reporter
jasmineEnv.execute (); //Start Suite

这是一个完整的脚本:

<script>
function load()
  {
  var description = location.hash.match(/".+"/).toString().replace(/"/g,"");
  var spec = location.hash.match(/function.+}/).toString();
  var result = Function("return " + spec)();
  var len = jasmine.getEnv().topSuite().children.length;
  var test;
  var suite;
  var suite_name;
  var reporter_args;
  var reporter_methods;
  var i;

  test = jasmine.getEnv().it(description, result);
  suite = jasmine.getEnv().topSuite().children[len];
  reporter_args = jasmine.HtmlReporter.toString().match(/options\.[a-zA-Z]+/g);
  reporter_methods = jasmine.HtmlReporter.toString().match(/this\.[a-zA-Z]+/g)
  var suite_name = suite.fullname;
  for(i = 0; i < len; i++)
    {
    jasmine.getEnv().topSuite().children.shift();
    }
  jasmine.getEnv().execute(suite_name);
  }
</script>

参考

于 2015-08-07T03:05:09.917 回答