gpt4 book ai didi

javascript - sinon.test 中包含的 Mocha 测试正在失去对 spy 、模拟和 stub 的访问

转载 作者:太空宇宙 更新时间:2023-11-04 16:15:11 24 4
gpt4 key购买 nike

我们的测试是这样组织的:

describe("description", sinon.test(function() {
const harness = this;
it("should do something", function() {
// do something with harness.spy, harness.mock, harness.stub
});
}));

运行时,这些测试都失败,并出现 TypeError:harness.spy is not a function。我添加了一些日志,发现 harness.spy 存在,并且是在调用传递给 it 的函数之前的函数,但在传递给 it 的函数内部harness.spy未定义

任何帮助理解这里发生的事情将不胜感激。

最佳答案

问题在于 Mocha 执行代码的顺序。用 sinon.test 将回调包装到 describe 是行不通的。这是因为对所有 describe 的回调it 中的任何测试开始执行之前就已完成执行。 sinon.test 的工作方式是,它创建一个新的沙箱,使用沙箱的一些方法(spy stub 等),然后调用其回调,当回调返回时,sinon.testthis中删除它添加的方法.

因此,在运行任何测试之前,包装 describe 回调的 sinon.test 执行的任何设置都将被撤消。这是我放置了一些 console.log 的示例。您将看到两个 console.log 语句在运行任何测试之前执行。

const sinon = require("sinon");

describe("description", sinon.test(function() {
const harness = this;
it("should do something", function() {
});

console.log("end of describe");
}));

console.log("outside");

您需要包装传递给它的回调,如下所示:

const sinon = require("sinon");

describe("description", function() {
it("should do something", sinon.test(function() {
this.spy();
}));
});

console.log("outside");

如果 sinon.test 创建的沙箱的生命周期不适合您,那么您必须创建沙箱并“手动”清理它,如下所示:

const sinon = require("sinon");

describe("description", function() {
let sandbox;
before(function () {
sandbox = sinon.sandbox.create();
});
after(function () {
sandbox.restore();
});
it("should do something", function() {
sandbox.spy();
});
it("should do something else", function() {
// This uses the same sandbox as the previous test.
sandbox.spy();
});
});

关于javascript - sinon.test 中包含的 Mocha 测试正在失去对 spy 、模拟和 stub 的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41132663/

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