首页 > web前端 > js教程 > JavaScript单位测试中的承诺:确定指南

JavaScript单位测试中的承诺:确定指南

Jennifer Aniston
发布: 2025-02-19 12:21:09
原创
318 人浏览过

Promises in JavaScript Unit Tests: the Definitive Guide

JavaScript承诺简化异步编码,但是测试它们可能很棘手。 本指南阐明了如何有效地处理单位测试中的承诺,避免了常见的陷阱并提高代码可读性。 一个示例项目,说明了这些技术的作者网站(原始文本中未提供链接)。

钥匙要点:

>保证在单位测试中处理可能很复杂,如果不仔细管理,则会导致误报。
    >摩卡的内置承诺支持会自动失败拒绝承诺的测试,从而简化了过程。
  • >
  • >启用直接的承诺断言,增强测试清晰度。
  • 始终从您的测试功能中返回承诺,以确保摩卡咖啡正确识别并正确处理。 chai-as-promised
  • >
  • 入门(Mocha&Chai):
>

安装摩卡和柴:

幼稚的测试诺言方法通常会导致详细的,不可阅读的测试:

npm install mocha chai
登录后复制
登录后复制

回调和错误处理添加了不必要的复杂性。 如果没有适当的错误处理,拒绝的承诺可能会导致误报。

var expect = require('chai').expect;

it('should do something with promises', function(done) {
  var blah = 'foo';
  var result = systemUnderTest();
  result.then(function(data) {
    expect(data).to.equal(blah);
    done();
  }, function(error) {
    assert.fail(error);
    done();
  });
});
登录后复制
>摩卡和承诺:

done()>摩卡的内置承诺支持简化了以下简化:

拒绝的承诺会自动未能使测试失败。 我们的最初示例可以改进:

返回诺言消除了对的需求和明确的错误处理。

>
it('should fail the test', function() {
  return Promise.reject('this promise will always be rejected');
});
登录后复制

>改进测试:
var expect = require('chai').expect;

it('should do something with promises', function() {
  var blah = 'foo';
  var result = systemUnderTest();
  return result.then(function(data) {
    expect(data).to.equal(blah);
  });
});
登录后复制
<>>>

done()> install

chai-as-promised这个库允许更多简洁的断言:

chai-as-promised关键字可以处理承诺的异步性质。 请记住总是回报诺言。 各种Chai主张与

>。
npm install chai-as-promised
登录后复制
一起起作用

有用的模式:
var chai = require('chai');
var expect = chai.expect;
var chaiAsPromised = require('chai-as-promised');
chai.use(chaiAsPromised);

it('should do something with promises', function() {
  var blah = 'foo';
  var result = systemUnderTest();
  return expect(result).to.eventually.equal(blah);
});
登录后复制
>
  • 比较对象:>使用eventually.deep.equaleventually.become进行深度对象比较。
  • >>特定对象属性:链有望在特定属性上访问和断言。 ES6箭头功能可以提高可读性。
  • >
  • 多个承诺:>使用同时处理多个承诺(但要注意一次测试中多个断言中的潜在代码气味)。 Promise.all
  • 比较多个承诺:
  • >使用来解决承诺然后比较结果。 Promise.all断言失败:
  • >使用
  • 进行拒绝断言。 to.be.rejectedto.be.rejectedWith测试挂钩:
  • >承诺在Mocha的
  • >,before> hooks中无缝工作。 after beforeEachafterEach>承诺和模拟/存根(带有sinon.js):
  • >
>安装sinon.js:

>使用

来创建存根返回承诺。 考虑

以简化承诺固执。

npm install mocha chai
登录后复制
登录后复制

>结论:sinon.stub().returns(Promise.resolve/reject(...))sinon-as-promised

>使用摩卡咖啡,柴和

>,测试承诺变得更加干净,更可读。 始终从测试功能中返回承诺。 提供的示例项目(链接不可用)提供了实践示例。 >常见问题(常见问题解答):

(由于长度和冗余而省略了原始常见问题解答。它们在很大程度上涵盖了本文中已经存在的信息。)

以上是JavaScript单位测试中的承诺:确定指南的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板