我的代码:
it('should', sinon.test(function() {
console.log(this); // what `this` refer here?
...
}));
在上面的代码中, this
功能中sinon.test()
引用了哪些内容?
我尝试记录它,但收到错误:
TypeError:将循环结构转换为JSON
Sinon版本:1.17.6
欢迎任何评论。感谢。
更新
看完下面的答案后,我仍然感到困惑。当this.myOnject.log
仅存在一次时,为什么以下两段代码有效?
it('should', sinon.test(function() {
const stubLog = this.stub(this.myObject.log, 'warn');
// ...
this.myObject.process();
// expect codes...
}));
it('should', sinon.test(function() {
const stubLog = sinon.stub(this.myObject.log, 'warn');
// ...
this.myObject.process();
// expect codes...
}));
更新
如果投票,请留下一些评论,让我知道你为什么投票。我发布的问题让我很困惑。但是我更加困惑为什么这么多人被投票,但没有留下任何有用的评论。
答案 0 :(得分:0)
sinon.test
为您的测试创建一个新的Sinon sandbox,扩充 Mocha通过Sinon特定方法(例如{{}传递给您的测试的正常this
对象1}},spy
等调用自动创建的沙箱上的相应方法。它增加对象的事实允许您仍然使用Mocha通常在stub
上提供的所有Mocha方法,并允许您在任意字段上设置值。测试结束时会自动调用沙箱的this
方法。这是一种在测试之间提供隔离的便捷方式,以便对一个测试通过Sinon执行的常见对象的修改不会影响其他测试。
以下是一个例子:
restore
这会产生:
const sinon = require("sinon");
before(function () {
// We set "moo".
this.moo = "I'm a cow.";
});
it("test", sinon.test(function () {
// We can access "stock" Mocha functions.
this.timeout(0);
// However, this is augmented with sinon functions.
const spy = this.spy();
spy();
// We can access "moo";
console.log("value of moo", this.moo);
}));
上面的代码假设Sinon 1.x.在Sinon 2.x及以上value of moo I'm a cow.
✓ test
1 passing (34ms)
不再与Sinon捆绑在一起,但它是独立的package。