我已经查阅了Jasmine的toHaveBeenCalledWith匹配器文档,以了解是否可以针对字符串类型的待测参数传入一个正则表达式。不幸的是,不支持这个功能。同时,GitHub上有一个问题请求实现这个功能。
我深入研究了代码库,看到可能可以在现有的匹配器中实现此功能。但我认为最好作为单独的匹配器来实现,从而单独捕获抽象。
与此同时,有什么好的解决方法吗?
我已经查阅了Jasmine的toHaveBeenCalledWith匹配器文档,以了解是否可以针对字符串类型的待测参数传入一个正则表达式。不幸的是,不支持这个功能。同时,GitHub上有一个问题请求实现这个功能。
我深入研究了代码库,看到可能可以在现有的匹配器中实现此功能。但我认为最好作为单独的匹配器来实现,从而单独捕获抽象。
与此同时,有什么好的解决方法吗?
calls
属性,该属性下还有一个 mostRecent() 函数。这个函数还有一个名为 args
的子属性,返回一个调用参数数组。var mySpy = jasmine.createSpy('foo');
mySpy("bar", "baz");
expect(mySpy.calls.mostRecent().args[0]).toMatch(/bar/);
expect(mySpy.calls.mostRecent().args[1]).toMatch(/baz/);
相当简单。
从Jasmine 2.2开始,您可以使用jasmine.stringMatching
进行字符串匹配:
var mySpy = jasmine.createSpy('foo');
mySpy('bar', 'baz');
expect(mySpy).toHaveBeenCalledWith(
jasmine.stringMatching(/bar/),
jasmine.stringMatching(/baz/)
);
在Jasmine 2.0中,签名略有变化。这里将是:
var mySpy = jasmine.createSpy('foo');
mySpy("bar", "baz");
expect(mySpy.calls.mostRecent().args[0]).toMatch(/bar/);
expect(mySpy.calls.mostRecent().args[1]).toMatch(/baz/);
而且Jasmine 1.3文档已经迁移。
或者,如果您正在监视对象上的方法:
spyOn(obj, 'method');
obj.method('bar', 'baz');
expect(obj.method.argsForCall[0][0]).toMatch(/bar/);
expect(obj.method.argsForCall[0][1]).toMatch(/baz/);
obj.method.calls.argsFor(index)
,它仍然是一个数组。 - Dr1Kuobj.method ['calls'] ['argsFor'](index)
来绕过类型检查。 - Crhistian RamirezspyOn(obj, 'method').and.callFake(function(arg1, arg2) {
expect(arg1).toMatch(/bar/);
expect(arg2).toMatch(/baz/);
});
obj.method('bar', 'baz');
expect(obj.method).toHaveBeenCalled();
它可以更清晰地显示方法的参数(而不是使用数组)
spyOn(obj, 'method');
obj.method('bar', 'baz');
expect(obj.method.calls.mostRecent().args[0]).toMatch(/bar/);
expect(obj.method.calls.mostRecent().args[1]).toMatch(/baz/);
.argsForCall
和.args
时,我收到了错误提示。 - dzylich