如何监视/获取jQuery链式调用的选择器

时间:2019-03-11 05:48:59

标签: jquery unit-testing jasmine

我查看了大约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]);

现在这可行,但我不喜欢,因为

  1. 它使用.find作为$()的间谍,对于下一个阅读此测试的人来说并不明显,所以我需要对其进行评论
  2. 这与replaceWith调用断开了,该调用实际上是要测试的最重要的部分。我想测试replaceWith的正确选择器。例如,如果上面的一行有$().find(),则此replaceWith调用将需要查找第3个find调用和第一个replaceWith调用以将其排列。这真的很容易出错。

我正在使用jQuery 3.x,该版本删除了.selector属性,该属性以前可以像$().replaceWith().selector一样使用,但不再起作用。

如何准确,清晰地测试将哪些选择器传递给链式呼叫?我可以像现在已删除的.selector一样查看任何属性吗?

0 个答案:

没有答案