为什么index.html被视为JSON?意外的令牌<位置0

问题描述:

我正在尝试使用Qunit为此html进行单元测试。我得到的错误是Uncaught SyntaxError: Unexpected token < in JSON at position 0。它指向<!DOCTYPE html>中的“<”显然这不是JSON,但它认为它是,但我不知道为什么。为什么index.html被视为JSON?意外的令牌<位置0

<!DOCTYPE html> 
     <html> 
     <head> 
      <meta charset="utf-8"> 
      <meta name="viewport" content="width=device-width"> 
      <title>Pinpoint Test</title> 
      <link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.0.0.css"> 

      <script type="text/javascript" src="https://code.jquery.com/qunit/qunit-2.0.0.js"></script> 
      <script type="text/javascript" src="lib/jquery-3.0.0.min.js"></script> 
      <script type="text/javascript" src="jshamcrest.js"></script> 
      <script type="text/javascript" src="core.js"></script> 
      <script type="text/javascript" src="integration.js"></script> 
      <script type="text/javascript" src="jsmockito-1.0.4.js"></script> 

      <script type="text/javascript" src="lib/handlebars-v4.0.5.js"></script> 
      <script type="text/javascript" src="bootstrap.min.js"></script> 

      <script src="pinpoint.js"></script> 
      <script src="pinpointTest.js"></script> 
     </head> 
     <body> 
      <div id="qunit"></div> 
      <div id="qunit-fixture"> 
      //a lot more html 
    </body> 
    </html 

它说Source: at window.onerror (https://code.jquery.com/qunit/qunit-2.0.0.js:322:11)

qunit-2.0.0.js:

// Cover uncaught exceptions 
    // Returning true will suppress the default browser handler, 
    // returning false will let it run. 
    window.onerror = function(error, filePath, linerNr) { 
     var ret = false; 
     if (onErrorFnPrev) { 
      ret = onErrorFnPrev(error, filePath, linerNr); 
     } 

     // Treat return value as window.onerror itself does, 
     // Only do our handling if not suppressed. 
     if (ret !== true) { 
      if (QUnit.config.current) { 


     if (QUnit.config.current.ignoreGlobalErrors) { 
        return true; 
       } 
       QUnit.pushFailure(error, filePath + ":" + linerNr); 
      } else { 
//322    QUnit.test("global failure", extend(function() { 
        QUnit.pushFailure(error, filePath + ":" + linerNr); 
       }, { validTest: true })); 
      } 
      return false; 
     } 

     return ret; 
    }; 

我的猜测是,在你的HTML文件的末尾缺少>只是一个错字在这个例子吗?我认为您可能需要将所有这些<script>标签放在<body>而不是<head>的末尾...... QUnit希望<div id="qunit"></div>标签能放入其UI,并且您的测试正在试图在HTML之前运行永远加载。试一试,但如果它不起作用,你可以简化你的测试只是一个简单的assert.equall(1, 1)看看是否有效?如果你想让我们看看他们,你也可以用你的实际测试来更新这个问题。