如何在Jasmine自定义匹配器中获取Spy的名称
在Jasmine 2.0自定义匹配器中获取Spy的名称
别担心,这个问题很好解决!在Jasmine 2.x版本里,每个Spy对象都内置了一个identity属性,它正好存储着你创建Spy时定义的名称——不管是通过spyOn监听对象方法生成的方法名,还是用jasmine.createSpy手动指定的自定义名称,都能通过这个属性拿到。
直接修改你的代码示例,把错误消息里的占位符替换成spy.identity就可以了:
var customMatchers = { toDoSomething: function(util, customEqualityTesters) { return { compare: function(spy) { var comparison = {}; comparison.pass = testSomeCondition(spy); if (!comparison.pass) { // 直接使用spy.identity获取Spy的名称 comparison.message = "Expect " + spy.identity + " to do something"; } return comparison; } } } }; beforeEach(function() { jasmine.addMatchers(customMatchers); });
补充说明:
- 如果你是用
spyOn(myObj, 'myMethod')创建的Spy,spy.identity的值就是myMethod; - 如果你是用
jasmine.createSpy('myCustomSpy')创建的独立Spy,spy.identity的值就是myCustomSpy; - 这个属性是Jasmine内部为Spy实例维护的,不需要你额外配置,直接调用即可。
这样你的错误消息就能准确显示Spy的名称,让测试失败时的提示更清晰啦!
内容的提问来源于stack exchange,提问作者mpasko256
相关产品推荐
相关产品推荐

