gpt4 book ai didi

javascript - it 语句在每个 expect 语句的循环迭代中,mocha

转载 作者:行者123 更新时间:2023-11-30 14:06:15 24 4
gpt4 key购买 nike

我有这个对象数组。

let links = [
{
url: 'some url 1',
status: 200
},
{
url: 'some url 2',
status: 200
}
]

这是在 before 中异步调用 LinkFunction 的结果:

  before(async () => {
try {
links = await LinkFunction();
} catch (err) {
assert.fail(err);
}
});

我想检查 urlstatus 属性是否存在,以及它们的类型是否对应为字符串和数字。
注意:指定的对象只是大响应的一个示例。所以在任何情况下都需要循环进行迭代。

我已经完成了这个迭代:

  it('Array to contain some props', () => {
links.map(property => {
expect(property).to.have.property('url').to.be.a('string');
expect(property).to.have.property('status').to.be.a('number');
});
});

但是我想要这样的东西:

it('Array to contain some props', () => {//or describe would be better here
links.map(property => {
it('link array to contain url string', () => {
expect(property).to.have.property('url').to.be.a('string');
});
it('link array to contain status number', () => {
expect(property).to.have.property('status').to.be.a('number');
});
});
});

不幸的是 it 语句在 map 中被忽略了。也许是因为有几个嵌套的 it 语句。那么我该如何实现类似的逻辑呢?

更新:

My full code:

最佳答案

您可能想使用 forEach 而不是 map

此外,"Passing arrow functions (aka "lambdas") to Mocha is discouraged"所以您可能希望将它们更改为正常功能。

话虽如此,如果将 links 定义为 mocha ,则它可以正常工作 最初运行测试文件并收集单个 it 测试:

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

describe('links', function() {
let links = [
{
url: 'some url 1',
status: 200
},
{
url: 'some url 2',
status: 200
}
]

links.forEach(function(property) {
it('link array to contain url string', function() {
expect(property).to.have.property('url').to.be.a('string');
});
it('link array to contain status number', function() {
expect(property).to.have.property('status').to.be.a('number');
});
});
});

..结果:

> mocha



links
√ link array to contain url string
√ link array to contain status number
√ link array to contain url string
√ link array to contain status number


4 passing (14ms)

更新

如您所见,仅在顶层或使用describe时起作用:

before(function() {
it('will NOT work here', function() { });
});

it('will work here', function() {
it('will NOT work here', function() { });
});

此外,links 必须在测试首次运行时可用,it 测试由 mocha 收集,因此这不会工作:

describe('links', function() {

let links = [];

before(function() {
links = [
{
url: 'some url 1',
status: 200
},
{
url: 'some url 2',
status: 200
}
];
});

// This won't work...
links.forEach(function(property) {
// .. since links is still an empty array when this runs
it('should...', function() { /* ... */ });
});

});

从您的问题更新来看,您的代码似乎从 before 中的 async 函数调用中检索了 links。因此,无法在测试首次运行和收集 it 测试时填充 links

所以看起来您将无法映射 links 中的项目来创建您的 it 测试,而是需要采用您描述的方法通过在单个测试中映射 links 中的项目。

关于javascript - it 语句在每个 expect 语句的循环迭代中,mocha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55328299/

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