2015-10-16 26 views
2

我对使用摩卡相当陌生,并且遇到了这个错误。请帮我理解这种行为。摩卡不捕捉未申报的变量

输出看起来像这样

inside content callback 
inside content callback 
inside content callback 

- 失败测试!

问题 - 我不明白为什么尽管使用'严格使用'它不会抱怨描述没有被声明。

请注意:如果我做修改这

var description = ..... 

它的工作原理中提琴!我错过了什么吗? 感谢您的时间!

回答

1

摩卡将报告试图分配给未声明的变量所引起的异常。如果我运行此:

"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不会阻止此异常到达执行上下文的顶部。换句话说,它不会吞噬异常。

如果您有抛出这个异常是由调用回调代码吞下一个例外,但回调,你会得到一个测试超时,但你不会知道为什么,因为摩卡将无法检测异常。它依赖于uncaughtException event,如果异常被吞噬,则不会发射。

+0

我明白,回调吞下事件。但我不明白为什么“内容回调”显示三次?为什么它继续回来? –

+0

它取决于'contentUtils.loadContent'的实现,它不显示。例如,如果回调被多次调用,那么您将获得多个输出到控制台。 – Louis

+0

真棒谢谢你! –