我查看了大约12个StackOverflow线程,但找不到它。我正在编写单元测试,并且希望能够以一种可以测试期望的选择器通过的方式监视jQuery调用。这是我现在拥有的:
代码:
$(this.settings.selector).replaceWith(this.settings.html);
测试:
// This find() is used internally when you do $(). This is checking the selector.
var findSpy = spyOn($.fn, 'find');
var replaceWithSpy = spyOn($.fn, 'replaceWith');
myComponent.init();
expect(replaceWithSpy.calls.count()).toBe(1);
expect(replaceWithSpy.calls.argsFor(0)).toEqual([myComponent.settings.html]);
expect(findSpy.calls.count()).toBe(5);
expect(findSpy.calls.argsFor(0)).toEqual([myComponent.settings.selector]);
现在这可行,但我不喜欢,因为
.find
作为$()
的间谍,对于下一个阅读此测试的人来说并不明显,所以我需要对其进行评论replaceWith
调用断开了,该调用实际上是要测试的最重要的部分。我想测试replaceWith
的正确选择器。例如,如果上面的一行有$().find()
,则此replaceWith
调用将需要查找第3个find调用和第一个replaceWith
调用以将其排列。这真的很容易出错。我正在使用jQuery 3.x,该版本删除了.selector
属性,该属性以前可以像$().replaceWith().selector
一样使用,但不再起作用。
如何准确,清晰地测试将哪些选择器传递给链式呼叫?我可以像现在已删除的.selector
一样查看任何属性吗?