运行 jasmine 的 fs-extra 模块功能不起作用

Running fs-extra module functions with jasmine doesn't work

当 运行仅使用 jasmine "node_modules/.bin/jasmine" "spec\test_spec.js"ing 测试时 fs.remove 未被调用 - 没有任何反应(没有错误,没有) .

当 运行ning 测试使用 jasmine-node "node_modules/.bin/jasmine-node" "spec\test_spec.js" fs 函数被正确调用。

但是 jasmine-node 不是 maintained anymore,应该可以用 jasmine 做所有事情。有任何想法吗?我们应该 运行 以不同的方式进行这些测试吗?

在 describe 块中,我们有 afterEach 可以正常工作。

afterEach(function () {
    sfnc.deleteProjectFolders(projectName);
});

fs.remove 没有被调用/没有任何反应

...
var fs = require('fs-extra');
...
exports.deleteProjectFolders = function (listOfFolders, pathToRootFolder) {
    ....
    console.log("This is called correctly");
    // This is not called - nothing happens 
    fs.remove(fl, function (err) {
        if (err) {
            exports.debugLog("Failed to delete folder {},\n Error: {} ".format(
                fl, err), true)
        }else{
            exports.debugLog("Folder {} deleted.".format(fl));
        }
    });
}

fs.remove() 是异步调用。测试必须等待它完成。我们需要将 callback 添加到 afterEach 函数。

简单回调的解决方案:

afterEach(function (done) {
    sfnc.deleteProjectFolders(projectName, done);
});

并且在函数中:

...
var fs = require('fs-extra');
...
exports.deleteProjectFolders = function (listOfFolders, callback) {
    ....
    fs.remove(fl, function (err) {
        if (err) {
            exports.debugLog("Failed to delete folder {},\n Error: {} ".format(fl, err), true)
        }else{
            exports.debugLog("Folder {} deleted.".format(fl));
        }
        callback()
    });
}

也可以写成promise