Javascript-全局变量值未在代码块外部正确反映
我已经将全局变量(布尔值)设置为false,然后在代码块中我将其设置为true,并导出该变量以编写单元测试 我相信我已经击中了代码,但我看到的值是假的 下面是代码片段Javascript-全局变量值未在代码块外部正确反映,javascript,promise,global-variables,Javascript,Promise,Global Variables,我已经将全局变量(布尔值)设置为false,然后在代码块中我将其设置为true,并导出该变量以编写单元测试 我相信我已经击中了代码,但我看到的值是假的 下面是代码片段 var bWrittenRegistry = false; function setOrUnsetRegistry(regValue){ let promise = new Promise(function(resolve, reject) { resolve((async () => { if(s
var bWrittenRegistry = false;
function setOrUnsetRegistry(regValue){
let promise = new Promise(function(resolve, reject) {
resolve((async () => {
if(somecondition){
regedit.putValue({
'HKLM\\System\\CurrentControlSet': {
'something': {
value: regValue,
type: 'REG_SZ'
}
}
},function(err) {//callback
console.log("called");//printed
if (err) {
console.log("Error22" + err);
}else {
bWrittenRegistry = true;
console.log(bWrittenRegistry);// prints true
}
}
);
}
}))();
}
Inside test.spec.js
it('should set or unset unset variable in registry',function(done){
this.timeout(300000);
somefunc.setOrUnsetRegistry(1).then(function(){
console.log(somefunc.bWrittenRegistry);//prints false
expect(somefunc.bWrittenRegistry).to.equal(true);//test fails
done();
})
})
我相信异步正在发生,但我希望在回调后it必须打印“true”使用
var
而不是let
,如果您需要以这种方式确定变量的范围。Let的作用域更紧。@Gavin它被声明为全局,这不是很“紧”。-)从我看到的情况来看,您并没有在测试中模拟错误情况,而且您的代码中有一个异步但没有等待。。。您应该在满足条件后解决问题,或者在出现错误时拒绝。。。但您马上就可以解决问题了。我已经更改了代码,改为“让”我声明全局变量为“var”,但问题仍然存在,当我预期变量为true时,测试失败请使用var
而不是let
,如果您需要以这种方式限定该变量的范围。Let的作用域更紧。@Gavin它被声明为全局,这不是很“紧”。-)从我看到的情况来看,您并没有在测试中模拟错误情况,而且您的代码中有一个异步但没有等待。。。您应该在满足条件后解决问题,或者在出现错误时拒绝。。。但您正在立即解决..我已经更改了代码“让”我声明全局变量为“var”仍然存在问题,当我预期变量为true时,测试失败