Sinon: 特务

创建于 2013-02-25  ·  13评论  ·  资料来源: sinonjs/sinon

如果可以使用名称创建间谍(对象属性除外),则有助于断言错误消息的可读性。 例如,茉莉花间谍就允许这样做。

Help wanted

最有用的评论

我看到了它总是说名字是proxy -但如果我Object.defineProperty(spy, 'name', { value: 'new name' })则报告“新名字”。

重新打开它会很棒。

所有13条评论

Sinon检查包装的函数名称。 因此,您可以通过包装一个空的命名函数来为间谍命名。

var spy = sinon.spy(function doStuff() {});

该技术还允许您产生具有特定长度的函数:

var spy = sinon.spy(function doStuff(a, b, c) {}); // spy.length === 3

据我所知,它始终是“代理”作为函数名称。 您确定此评论正确吗?

据我所知,它始终是“代理”作为函数名称。 您确定此评论正确吗?

您介意发布一个可运行的示例吗?

// test/index.js
var sinon = require('sinon');

var spy = sinon.spy(function doStuff() {
    console.log('Name: ' + spy.name);
});

spy();
➜  sinon-test node test/index.js 
Name: proxy

我不记得以前做过什么,但是我从失败的测试中获取了Mocha的输出,其中函数名称为“ proxy”,而您不知道它为“ doStuff”。 如果我能确切记得那是什么,我将发布

我看到了它总是说名字是proxy -但如果我Object.defineProperty(spy, 'name', { value: 'new name' })则报告“新名字”。

重新打开它会很棒。

我通过以下方法解决了这个问题:

const mapMethod = sinon.spy(Array.prototype, 'map');
const methodName = map.wrappedMethod.name;
console.log(methodName); // 'map'

@Tbhesswebber在非测试代码依赖函数名时不起作用。

啊...很好。 我正在研究用于教授高阶函数的课程(使用Array.prototype作为起点),这就是导致我遇到此问题的原因。 非常不同的用例!

PS-当您实际尝试时,测试实现细节确实很繁琐!

我可以看到这将是有用的。 如果有人想对此进行更深入的研究,那将很酷。

可能是某些功能或测试取决于返回的函数的名称。 如果是这样,我们应该讨论如何解决它。

@mroderick在创建带有原始间谍的间谍时, Object.defineProperty(spy, 'name', { configurable: true, value: spy.wrappedMethod.name })应该这样做吗?

我认为这曾经是我们所拥有的功能-通过为功能命名来命名间谍-猜想它在途中迷路了。 我同意允许明确命名的建议。 但是我们是否也应该更改“代理”名称? 我觉得间谍功能应该看起来像原始功能一样近。 我们确保正确的Arity,但现在更改名称。 似乎不对。

我刚刚意识到我们在API中也有spy.named(name) 😆它将在间谍上设置displayName属性。 我认为,它也应该更改函数名称。 现在看看这个。

#1987的补丁发布在v7.2.7 。 请让我们知道这是否对每个人都令人满意❤️

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

optimatex picture optimatex  ·  4评论

brettz9 picture brettz9  ·  3评论

NathanHazout picture NathanHazout  ·  3评论

byohay picture byohay  ·  3评论

andys8 picture andys8  ·  4评论