mocha单元测试测试结果不一致

发布于 2022-09-12 22:31:08 字数 2133 浏览 17 评论 0

解决方案等进展更新,问题记录

实际使用发现chai同样代码测试通过情况不一致性,有时候通过测试,有时候不通过,比较魔幻。突然意识到except可能是异步的,这点验证起来比较简单。

1、”先定义后执行“
2、describe是一个测试集,里面包含了一系列若干测试
3、it是一个测试单元
出错代码测试粒度过细,一个测试单元实际有多条断言,之前放在全局主要是为了偷懒,但这种偷懒不便于代码阅读(需要到处找这个对象在哪里被修改了)

所以只要按照单元测试代码可读性修改,完全可以解决

仍然有这么几个问题:
为什么是异步的?有没有可能同步执行?mocha原理是什么?

说明:

stack有一个属性length,实际一直是0,有一个empty方法,返回值true,没弄懂下面的运行结果,预期应该全部通过

  except init
    ✓ length = 0
    1) length = 0
    ✓ isEmpty
    2) isEmpty

  should init
    ✓ isEmpty

  should
    3) length
    
    
    
  1) except init
       length = 0:

      AssertionError: expected 1 to equal 0
      + expected - actual

      -1
      +0
      
      at Context.<anonymous> (test/stackInterface.js:18:34)
      at processImmediate (internal/timers.js:461:21)

  2) except init
       isEmpty:
     AssertionError: expected false to be truthy
      at Context.<anonymous> (test/stackInterface.js:24:36)
      at processImmediate (internal/timers.js:461:21)

  3) should
       length:

      AssertionError: expected 1 to equal 0
      + expected - actual

      -1
      +0
      
      at Context.<anonymous> (test/stackInterface.js:34:33)
      at processImmediate (internal/timers.js:461:21)

代码

let expect = require('chai').expect
let should = require('chai').should()

let ll = stack.length
console.log('stack init' + ll)
describe('except init', function () {
  it('length = 0', function () {
    expect(ll).to.be.equal(0)
  })
  it('length = 0', function () {
    expect(stack.length).to.be.equal(0)
  })
  it('isEmpty', function () {
    expect(isE).to.be.ok
  })
  it('isEmpty', function () {
    expect(stack.isEmpty()).to.be.ok
  })
})
describe('should init', function () {
  it('isEmpty', function () {
    stack.isEmpty.should.to.be.ok
  })
})
describe('should', function () {
  it('length', function () {
    stack.length.should.to.be.equal(0)
  })
})
console.log(stack.length === 0) // true
console.log(stack.isEmpty() === true) // true

版本
"chai": "^4.3.0",
"mocha": "^8.2.1",

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

避讳 2022-09-19 22:31:08

首先啊,JS本来就是以异步为特性,其次mocha也是一个异步的测试框架。
如果非得想单元测试之间不相互影响,至少你的stack,ll得每个单元测试分别定义,当然,mocha提供了hooks来让你省事:

describe('hooks', function() {
  before(function() {
    let stack = balababala;
    let ll = stack.length
  });

  after(function() {
    // runs once after the last test in this block
  });

  beforeEach(function() {
    // runs before each test in this block
  });

  afterEach(function() {
    // runs after each test in this block
  });

  // test cases
});

希望能帮助到你。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文