【问题标题】:Mocha does not catch undeclared variableMocha 不会捕获未声明的变量
【发布时间】:2015-10-16 01:54:45
【问题描述】:

我对使用 mocha 还很陌生,但遇到了这个错误。请帮助我理解这种行为。

'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

- 测试失败!

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

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

var description = .....

它适用于中提琴!我错过了什么吗? 感谢您的宝贵时间!

【问题讨论】:

    标签: javascript unit-testing mocha.js


    【解决方案1】:

    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 不会无法检测到异常。它依赖于uncaughtException event,如果异常被吞没,则不会发出。

    【讨论】:

    • 我知道回调会吞噬事件。但我不明白为什么“内部内容回调”显示三次?为什么会一直倒退?
    • 这取决于contentUtils.loadContent的实现,你没有显示。例如,如果多次调用回调,那么您将获得多个输出到控制台。
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多