gpt4 book ai didi

javascript - 使用 Mocha 测试访问内部描述 block 时,外部描述 block 中的变量未定义

转载 作者:IT老高 更新时间:2023-10-28 23:23:41 25 4
gpt4 key购买 nike

我有一个如下所示的测试套件:

(注意顶部的 accountToPost 变量(在第一个 describe block 下方)

describe('Register Account', function () {

var accountToPost;

beforeEach(function (done) {
accountToPost = {
name: 'John',
email: 'email@example.com',
password: 'password123'
};

done();
});

describe('POST /account/register', function(){

describe('when password_confirm is different to password', function(){

//accountToPost is undefined!
accountToPost.password_confirm = 'something';

it('returns error', function (done) {
//do stuff & assert
});
});
});
});

我的问题是,当我尝试在嵌套的描述 block 中修改 accountToPost 时,它是未定义的......

我能做些什么来解决这个问题?

最佳答案

将分配保留在原处,但包含在 beforeEach 回调中,您的代码将执行:

beforeEach(function () {
accountToPost.password_confirm = 'something';
});

Mocha 加载您的文件并执行它,这意味着 describe 调用会立即执行 Mocha 实际运行测试套件之前。这就是它如何计算出您声明的测试集。

我通常只在传递给 describe 的回调主体中放置函数和变量声明。 更改测试中使用的对象状态的所有内容都属于 beforebeforeEachafterafterEach ,或者在测试本身内部。

另外要知道的是 beforeEachafterEachit 调用 not describe 调用的回调。因此,如果您认为您的 beforeEach 回调将在 describe('POST/account/register', ... 之前执行,这是不正确的。它在 it 之前执行('返回错误', ....

这段代码应该能说明我在说什么:

console.log("0");
describe('level A', function () {
console.log("1");
beforeEach(function () {
console.log("5");
});

describe('level B', function(){
console.log("2");

describe('level C', function(){
console.log("3");

beforeEach(function () {
console.log("6");
});

it('foo', function () {
console.log("7");
});
});
});
});
console.log("4");

如果您在此代码上运行 mocha,您将看到数字以递增的顺序输出到控制台。我的结构与您的测试套件的结构相同,但添加了我推荐的修复程序。当 Mocha 确定套件中存在哪些测试时,输出数字 0 到 4。测试还没有开始。其他数字在正常测试期间输出。

关于javascript - 使用 Mocha 测试访问内部描述 block 时,外部描述 block 中的变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21470349/

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