摩卡不捕获未声明的变量
Mocha does not catch undeclared variable
我对使用 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 = .....
中提琴奏效了!我错过了什么吗?
感谢您的宝贵时间!
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
不会阻止此异常到达顶部执行上下文。换句话说,它不会吞下异常。
如果你有一个抛出异常的回调,但是 这个异常被调用回调的代码吞没了,你会得到一个测试超时,但你不会知道为什么因为摩卡将无法检测到异常。它依赖于 uncaughtException
event,如果异常被吞噬则不会发出。
我对使用 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 = .....
中提琴奏效了!我错过了什么吗? 感谢您的宝贵时间!
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
不会阻止此异常到达顶部执行上下文。换句话说,它不会吞下异常。
如果你有一个抛出异常的回调,但是 这个异常被调用回调的代码吞没了,你会得到一个测试超时,但你不会知道为什么因为摩卡将无法检测到异常。它依赖于 uncaughtException
event,如果异常被吞噬则不会发出。