Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mocha不捕获未声明的变量_Javascript_Unit Testing_Mocha.js - Fatal编程技术网

Javascript Mocha不捕获未声明的变量

Javascript Mocha不捕获未声明的变量,javascript,unit-testing,mocha.js,Javascript,Unit Testing,Mocha.js,我刚开始使用摩卡咖啡,我遇到了这个错误。请帮助我理解这种行为 'use strict'; var flightMiddlewareMock = require(process.cwd() + '/test/mock/response/flightmock'); describe('Test Flights function: getTime', function(){ var mockData; beforeEach(function(done){ mockData = f

我刚开始使用摩卡咖啡,我遇到了这个错误。请帮助我理解这种行为

'use strict';
 var flightMiddlewareMock = require(process.cwd() + '/test/mock/response/flightmock');


describe('Test Flights function: getTime', function(){
  var mockData;
  beforeEach(function(done){
    mockData = flightMiddlewareMock.getValidData();
    done();
  }
  it('getFlightDescription returns the full flight description', function(done){

    contentUtils.loadContent({
            'files': {
                activity: '/flights/america'
            },
            'locality': "en_US"
    }, function(err, bundle) {

            var flightsMiddleware = new FlightsMiddleware(country, mockData.req, bundle); 
            console.log('inside content callback');

            description = flightsMiddleware.getFlightDescription(mockData.results.body.items[0]);

            assert.equal(description, "Boeing 777");
            done();
    }
  });
});
输出如下所示

inside content callback
inside content callback
inside content callback
-测试失败

问题-我不明白为什么尽管使用“严格使用”,但它并没有抱怨没有声明描述

请注意:如果我将此修改为

var description = .....
中提琴真管用!我错过什么了吗?
谢谢你的时间

Mocha将报告由于尝试分配给未声明的变量而导致的异常。如果我运行这个:

"use strict";

it("foo", function (done) {
    setTimeout(function () {
        description = "foo";
        done();
    }, 1000);
});
我得到的结果是:

  1) foo

  0 passing (1s)
  1 failing

  1)  foo:
     Uncaught ReferenceError: description is not defined
      at null._onTimeout (test.js:5:21)
现在,我使用了
setTimeout
,这是一个性能良好的函数,当传递给它的回调抛出异常时,
setTimeout
不会阻止该异常到达执行上下文的顶部。换句话说,它不接受例外


如果您有一个引发异常的回调,但该异常被调用回调的代码吞没,那么您将得到一个测试超时,但您不知道原因,因为Mocha无法检测到异常。它依赖于,如果异常被吞噬,则不会发出。

我知道回调会吞噬事件。但我不明白为什么“内部内容回调”会显示三次?为什么它会一直往回走?这取决于
contentUtils.loadContent
的实现,您没有显示它。例如,如果多次调用回调,那么您将获得控制台的多个输出。