only 独家测试

https://mochajs.org/#exclusive-tests

  1. /**
  2. * only 排他性测试,当有only时,不执行其他的用例,只执行.only的
  3. * 注意:所有嵌套套件仍将执行。
  4. * 注意:如果存在钩子,仍将执行。
  5. *
  6. * 注意不要将.only()版本的用法提交给版本控制,除非您确实如此!为此,
  7. * 可以--forbid-only在持续集成测试命令中(或在git precommit钩子中)使用选项运行mocha 。
  8. */
  9. describe('Array', function () {
  10. describe('#indexOf()', function () {
  11. it.only('should return -1 unless present', function () {
  12. assert(('1').indexOf('1') !== -1);
  13. });
  14. it('should return the index when present', function () {
  15. assert(1 === 1);
  16. });
  17. });
  18. });
  19. describe('Array', function () {
  20. describe.only('#indexOf()', function () {
  21. it.only('should return -1 unless present', function () { // 如果没有.only那整个describe都会被执行
  22. // this test will be run
  23. });
  24. it('should return the index when present', function () {
  25. // this test will not be run
  26. });
  27. });
  28. });
  29. describe('String', function () {
  30. it('should return the index when present', function () {
  31. // this test will not be run
  32. });
  33. })

skip 包容性测试

https://mochajs.org/#inclusive-tests
image.png

  1. const assert = require('assert').strict;
  2. /**
  3. * .skip() 告诉Mocha简单地忽略测试用例。
  4. * 最佳做法:使用.skip()而不是注释掉测试。
  5. */
  6. describe('Array', function () {
  7. describe('#indexOf()', function () {
  8. it.skip('should return -1 unless present', function () {
  9. // this test will not be run
  10. });
  11. it('should return the index when present', function () {
  12. // this test will be run
  13. });
  14. });
  15. });
  16. it('should only test in the correct environment', function() {
  17. if (/* check test environment */) {
  18. // make assertions
  19. } else {
  20. this.skip();
  21. }
  22. });

image.png

  1. const assert = require('assert').strict;
  2. /**
  3. * .skip() 告诉Mocha简单地忽略测试用例。
  4. */
  5. describe('Array', function () {
  6. before(function () {
  7. if (1 === 2) {
  8. // setup code
  9. } else {
  10. this.skip();
  11. }
  12. });
  13. describe('#indexOf()', function () {
  14. it.skip('should return -1 unless present', function () {
  15. // this test will not be run
  16. });
  17. it('should return the index when present', function () {
  18. // this test will not be run
  19. });
  20. });
  21. });

retries 重复执行

您可以选择最多重试失败的测试。此功能旨在处理无法轻松模拟/存根资源的端到端测试(功能测试/ Selenium …)。不建议将此功能用于单元测试
此功能会重新运行beforeEach/afterEach挂钩,但不会重新运行before/after挂钩。

  1. const assert = require('assert').strict;
  2. let num = 0;
  3. /**
  4. * this.retries 重新实验
  5. */
  6. describe('retries', function () {
  7. // Retry all tests in this suite up to 4 times
  8. this.retries(4);
  9. beforeEach('beforeEach should succeed on the 3rd try', function () {
  10. console.log('xxx');
  11. });
  12. it('should succeed on the 3rd try', function () {
  13. // Specify this test to only retry up to 2 times
  14. // this.retries(2);
  15. num += 1;
  16. console.log(`num:${num}`);
  17. assert(false);
  18. });
  19. });

动态生成测试

  1. var assert = require('chai').assert;
  2. function add() {
  3. return Array.prototype.slice.call(arguments).reduce(function(prev, curr) {
  4. return prev + curr;
  5. }, 0);
  6. }
  7. describe('add()', function() {
  8. var tests = [
  9. {args: [1, 2], expected: 3},
  10. {args: [1, 2, 3], expected: 6},
  11. {args: [1, 2, 3, 4], expected: 10}
  12. ];
  13. tests.forEach(function(test) {
  14. it('correctly adds ' + test.args.length + ' args', function() {
  15. var res = add.apply(null, test.args);
  16. assert.equal(res, test.expected);
  17. });
  18. });
  19. });
  20. // 上面的代码将产生具有三个规格的套件

测试时间

许多报告程序将显示测试持续时间和标志测试,这些测试速度很慢(默认值:75ms),如此处的“ spec”报告程序所示:
image.png
测试持续时间分为三个级别(如下图所示):

  1. 快速:运行在“慢速”阈值一半内的测试将以绿色显示持续时间(如果有的话)。
  2. 正常:运行超过阈值一半(但仍在阈值范围内)的测试将以黄色显示持续时间。
  3. 慢:超过阈值的测试将以红色显示持续时间。

image.png
要调整“慢速”,可以使用以下slow()方法:

  1. describe('something slow', function() {
  2. this.slow(300000); // five minutes
  3. it('should take long enough for me to go make a sandwich', function() {
  4. // ...
  5. });
  6. });