如果我尝试检查只存在一个文件(实际存在),我的测试通过 成功。但是,如果我尝试添加断言非现有文件,则两个测试都会传递错误
describe('script entry points', function () {
entryJs = {
"app": "./coffee/app",
"shame": "./coffee/shame"
};
for(var pointJs in entryJs) {
pathJs = 'web/js'+pointJs+'.js';
it('should return true when '+pathJs+' file exist', function () {
fs.stat(pathJs, function(err, data) {
if (err)
console.log('it does not exist');
else
console.log('it exists');
});
});
}
});
答案 0 :(得分:1)
在console.log(pathJs);
之前添加fs.stat
,您会发现fs.stat
被调用两次且pathJs
值相同。
当第一次调用fs.stat时,pathJs变量保存在最后 for loop 循环中分配给它的值。
原因是node.js。的异步性质 你需要使用闭包。
解决方案:
for(var pointJs in entryJs) {
pathJs = 'web/js/'+entryJs[pointJs]+'.js';
(function(path){
it('should return true when '+path+' file exist', function () {
fs.stat(path, function(err, data) {
if (err)
console.log('it does not exist');
else
console.log('it exists');
});
});
})(pathJs);
}