Nodejs文件存在

时间:2016-06-27 07:18:03

标签: node.js

如果我尝试检查只存在一个文件(实际存在),我的测试通过 成功。但是,如果我尝试添加断言非现有文件,则两个测试都会传递错误

    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');
             });
         });
      }
   });

1 个答案:

答案 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);
}