【问题标题】:Running fs-extra module functions with jasmine doesn't work用 jasmine 运行 fs-extra 模块功能不起作用
【发布时间】:2017-01-24 17:06:13
【问题描述】:

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

当使用 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));
        }
    });
}

【问题讨论】:

    标签: javascript node.js jasmine jasmine-node


    【解决方案1】:

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

    简单回调的解决方案:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-08
      • 2021-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-22
      • 1970-01-01
      相关资源
      最近更新 更多