gpt4 book ai didi

javascript - 获取给定测试的 mocha `describe` 调用列表

转载 作者:行者123 更新时间:2023-12-02 14:35:28 26 4
gpt4 key购买 nike

有没有办法获取传递给describe的消息数组?

我想根据下面的 describe 调用中作为消息传递的值动态创建 testList 数组。

示例测试

<script src="https://cdnjs.cloudflare.com/ajax/libs/chai/3.5.0/chai.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.5.3/mocha.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/mocha/2.5.3/mocha.min.css" rel="stylesheet"/>
<div id="mocha"></div>
<script>
mocha.setup('bdd');
</script>
<script>
mocha.checkLeaks();
//mocha.globals(['jQuery']);
</script>
<script>
var expect = chai.expect;
var testList = ['methodTrue', 'methodFalse', 'methodIdentity'];
var testObject = {
methodTrue: function () {return true;},
methodFalse: function () {return false;},
methodIdentity: function (n) {return n;}
}
describe('testObject', function () {
describe('methodTrue', function () {
it('should be a method', function () {
expect(testObject.methodTrue).to.be.a('function');
});
});
describe('methodFalse', function () {
it('should be a method', function () {
expect(testObject.methodFalse).to.be.a('function');
});
});
describe('methodIdentity', function () {
it('should be a method', function () {
expect(testObject.methodIdentity).to.be.a('function');
});
});
it('should have a method for every test', function () {
Object.keys(testObject).forEach(function (v, i) {
expect(testList.indexOf(v), 'no test for ' + v).to.be.above(-1);
});
});
});
mocha.run();
</script>

最佳答案

您可能可以查看 Mocha 的源代码并了解如何运行测试套件。然而,这里有一种方法可以做到这一点,它不依赖于了解内部结构,并且如果内部结构发生变化也不会破坏。策略是将 describe 替换为您自己的函数,该函数记录传递给它的内容,以便您以后可以使用它。我已经在命令行中使用了 Mocha,但是在要在 Node 中运行的套件中执行此操作与在要在浏览器中运行的套件中执行此操作没有区别。

var blocks = [];

function wrapperDescribe() {
// It is generally unsafe to just leak `arguments` objects. So we
// slice it to make a copy before pushing it into `blocks`.
var args = Array.prototype.slice.call(arguments);
blocks.push(args);
describe.apply(this, args);
}

(function () {
// We do not do this at the top level because it would modify a
// global used by all Mocha files. Whether or not you do want this
// depends on the needs to you project.
var describe = wrapperDescribe;

function fn () {}

describe("one", function () {
it("test 1", fn);
it("test 2", fn);
});

describe("two", function () {
it("test 1", fn);
it("test 2", fn);
});
}());

console.log(blocks);

输出:

$ ./node_modules/.bin/mocha 
[ [ 'one', [Function] ], [ 'two', [Function] ] ]


one
✓ test 1
✓ test 2

two
✓ test 1
✓ test 2


4 passing (6ms)

该数组是在测试运行之前输出的,这对于 Mocha 来说是正常的。 (Mocha 首先读取所有测试,执行所有 describe 回调,然后运行测试。)

要使其仅在 describe block 的子集上工作,您可以不覆盖 describe 而是根据需要直接调用 wrapperDescribe .

关于javascript - 获取给定测试的 mocha `describe` 调用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37495065/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com