mocha单元测试测试结果不一致
解决方案等进展更新,问题记录
实际使用发现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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
首先啊,JS本来就是以异步为特性,其次mocha也是一个异步的测试框架。
如果非得想单元测试之间不相互影响,至少你的stack,ll得每个单元测试分别定义,当然,mocha提供了hooks来让你省事:
希望能帮助到你。