promise が返されるのを待つテストを実行しようとしていますが、jasmine がテストを完了する前に終了していて、その理由がわかりません。
私のテストは
describe("npm packages",function(){
it("should get npm packages", function(){
//remove node passport directory so we can check it gets added
var flag = false;
exec_child_process('rimraf node_modules/passport', function(err){
if(err!==null){
console.log('problem removing passport directory');
} else {
console.log('passport directory removed');
npmInstallPackagePromise();
}
});
function npmInstallPackagePromise(){
mm.installNodeModules()
.then(function(){
fs.readdir('node_modules/passport',function(err){
if(err!==null){
console.log('error reading node module: '+err);
} else {
flag=true;
}
});
});
}
waitsFor(function(){
return flag;
},'resolved promise',6000);
runs(function(){
expect(flag).toBe(true);
});
});
});
テストが実行されているコードは
module.exports = function(config){
return {
getInstalledNodeModules: function(){
var defer = q.defer();
exec('npm ls --json', function(err,stdout,stderr){
console.log(err);
if(err) return defer.reject(console.log(err));
console.log(stdout);
defer.resolve(stdout);
});
return defer.promise;
},
installNodeModules: function(){
//go through each node module
this.getInstalledNodeModules().then(function(modules_json){
console.log(modules_json);
for(m in config.node_modules){
//check if the module is a local module already
console.log(modules_json[m]);
};
})
}
「モックを使用するだけで、実際にファイルが書き込まれていることを確認しないでください」と言う人もいますが、exec関数を介してnpmを実行しているため、実際に正しく実行されていることを確認したい. したがって、それを解決策として提供しないでください。