如何在异步函数中包装Mocha / Chai测试?

时间:2014-06-21 15:54:02

标签: javascript mocha chai

我正在使用使用promises异步加载的模块的框架。这些模块包含我想为其创建测试的方法(对于这个问题,可以假设它是同步的)。

目前,我的代码类似于以下内容:

describe("StringHelper", function() {
    describe("convertToCamelCase()", function() {
        it("should convert snake-cased strings to camel-case", function(done) {
            Am.Module.load("Util").then(function() {
                var StringHelper = Am.Module.get("Util").StringHelper;
                //Test here
                done();
            });
        });
    });

    describe("convertToSnakeCase()", function() {
        it("should convert camel-cased strings to snake case.", function(done) {
            Am.Module.load("Util").then(function() {
                var StringHelper = Am.Module.get("Util").StringHelper;
                //Another test here
                done();
            });
        });
    });
});

鉴于Am.Module.load()本质上是以一种返回promise的方式调用RequireJS,因此,应该只在开头加载一次,我该如何重写上面的内容?

我基本上希望有这样的东西:

Am.Module.load("Util").then(function() {
    var StringHelper = Am.Module.get("Util").StringHelper;

    describe("StringHelper", function() {
        describe("convertToCamelCase()", function() {
            it("should convert snake-cased strings to camel-case", function(done) {
                //Test here
                done();
            });
        });

        describe("convertToSnakeCase()", function() {
            it("should convert camel-cased strings to snake case.", function(done) {
                //Another test here
                done();
            });
        });
    });
});

不幸的是,上述情况不起作用 - 测试根本没有被执行。记者甚至没有显示describe("StringHelper")的部分。有趣的是,在玩完之后,只有在所有测试都以此(第二个代码片段)方式编写时才会出现这种情况。只要至少有一个以第一种格式编写的测试,测试就会正确显示。

1 个答案:

答案 0 :(得分:1)

您可以使用Mocha的before()挂钩异步加载Util模块。

describe("StringHelper", function() {
  var StringHandler;

  before(function(done) {
    Am.Module.load("Util").then(function() {
      StringHelper = Am.Module.get("Util").StringHelper;
      done();
    });
  });
  describe("convertToCamelCase()", function() {
    it("should convert snake-cased strings to camel-case", function() {
      //Test here
    });
  });

  describe("convertToSnakeCase()", function() {
    it("should convert camel-cased strings to snake case.", function() {
      //Another test here
    });
  });
});