gpt4 book ai didi

node.js - Mocha JS : How to share assertion/"it(' should')"code between tests

转载 作者:太空宇宙 更新时间:2023-11-03 22:46:34 25 4
gpt4 key购买 nike

我使用 Nodejs 运行了一些 Mocha 测试来测试 Web 服务器。

许多测试都会导致服务器返回错误,例如400 错误请求。

目前测试中充斥着以下代码的许多副本:

it('should respond with 400 (Bad Request)', function (){
expect(httpResponse.statusCode).to.equal(httpstatus.BAD_REQUEST);
});

这是一个简化的伪代码示例:

describe('When passing bad JSON data', function(){
var response
before(function(done){
callUrlToInsert(url, badJson, function(err, resp){
response = resp
done()
}
}
it('should respond with 400 (Bad Request)', function (){
expect(httpResponse.statusCode).to.equal(httpstatus.BAD_REQUEST)
})
}

这让我很烦恼,因为作为一名程序员,我尽可能避免重复代码。

但是,将其放入函数中不起作用:

function verifyItReturnedBadRequest400(httpResponse)
{
it('should respond with 400 (Bad Request)', function (){
expect(httpResponse.statusCode).to.equal(httpstatus.BAD_REQUEST);
});
}

因为对 it() 的调用不会立即测试断言;我的[有限]理解是 it() 将闭包添加到测试列表中。因此,当检查完成时,httpResponse 变量已超出范围。 (我不明白为什么会出现这种情况,因为在这两种情况下都有对 it() 的调用;为什么在一种情况下它位于另一级别的函数调用中很重要?我可能遗漏了一些关于JavaScript 范围。)

是否有一种通用方法可以避免所有这些重复代码?还是每个人都在各处复制所有断言代码?这是我第一次涉足 Mocha,所以我可能遗漏了一些明显的东西。

此外,解释为什么函数方法不起作用?的奖励积分

谢谢!

最佳答案

维基百科上有一篇关于此的文章。 https://github.com/mochajs/mocha/wiki/Shared-Behaviours

我猜你的测试中有一些错误。将 it() 放入包装函数中效果很好。这是一个小型的工作演示。

'use strict';

const assert = require('assert');

const xEqualsOne = () => {
it('should be equal 1', () => {
assert.equal(this.x, 1);
});
};

describe('async number', () => {
this.x = 0;

before(done => {
this.x++
setTimeout(done, 100);
});

xEqualsOne();
});

关于node.js - Mocha JS : How to share assertion/"it(' should')"code between tests,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34702727/

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