首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用异步函数的Mocha/Should.js

使用异步函数的Mocha/Should.js
EN

Stack Overflow用户
提问于 2016-05-24 14:14:50
回答 1查看 528关注 0票数 1

我是JavaScript测试框架的新手。我想做一些优化,但我遇到了一些问题。这个项目正在使用should.js

下面是我最初测试用例的简化版本:

代码语言:javascript
复制
describe('Simple', function() {
  describe('Test', function() {
    it('should do something', function(done) {
      somePromise.then(function(data) {
        data.should.above(100);
        done();
      });
    }

    it('should do something else but alike', function(done) {
      somePromise.then(function(data) {
        data.should.above(100);
        done();
      });
    }

  }
});

我试着这样做:

代码语言:javascript
复制
var testFunc = function(data) {
  it('should do something', function(done) {
      data.should.above(100);
      done();
  });
}

describe('Simple', function() {
  describe('Test', function() {
      somePromise.then(function(data) {
        testFunc(data);
      });

      somePromise.then(function(data) {
        testFunc(data);
      });
  }
});

这个承诺是异步的,也许这就是我的“优化”失败的原因?我在docs中没有找到describe函数的“完成”回调。

提前感谢!任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-24 16:03:57

您的示例不适用于因为Mocha已经完成了测试用例的注册,当您的承诺解决时

用不同的断言测试相同的承诺

要使用多个断言测试单个承诺,只需在测试开始时创建承诺,然后在it块中使用它,如下所示:

代码语言:javascript
复制
describe('A module', function() {
    var promise;

    before(function () {
        promise = createPromise();
    });

    it('should do something', function() {
        return promise.then(function (value) {
            value.should.be.above(100);
        });
    });

    it('should do something else', function() {
        return promise.then(function (value) {
            value.should.be.below(200);
        });
    });
});

请注意,如果从API调用返回承诺,则调用将只进行一次。结果简单地缓存在对这两个测试用例的承诺中。

这还利用了一个事实,即您可以从测试用例返回承诺。而不是使用已完成的回调。如果承诺被拒绝,或者如果The ()调用中的任何断言失败,那么测试用例就会失败。

用相同的断言测试不同的承诺

假设您希望使用相同的断言测试不同的承诺,您可以将一个函数传递给testFunc,该函数创建要测试的承诺。

代码语言:javascript
复制
var testFunc = function(promiseFactory) {
  it('should do something', function(done) {
      promiseFactory().then(function(data) {
          data.should.above(100);
          done();
      });
  });
}

describe('Simple', function() {
  describe('Test', function() {
      testFunc(function () { return createSomePromise(); });

      testFunc(function () { return createSomeOtherPromise(); });
  });
});

这是因为Mocha的it函数直接在描述块中运行。然后,在实际运行测试用例时,使用promiseFactory回调创建承诺。

由于您也可以从测试用例返回承诺,所以您可以更改testFunc以返回一个断言,如下所示:

代码语言:javascript
复制
var testFunc = function(promiseFactory) {
  it('should do something', function() {
      return promiseFactory().should.eventually.be.above(100);
  });
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37416234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档