茉莉花间谍命名

Jasmine spy naming

Jasmine 测试中创建间谍时,必须传递间谍名称,例如:

var spy = jasmine.createSpy('spy');
...
expect(spy).toHaveBeenCalled();
  1. 这些名字的用途是什么?
  2. 命名间谍有什么限制吗?全球唯一性?
  3. 这样的名字在我看来是多余的。是否可以避免在我的代码中指定它们?

首先,让我们做一个简单的实验(在 Jasmine 2.0 上测试):

it("sandbox playground", function() {
    var twin1 = jasmine.createSpy('twin brother').and.returnValue({});
    var twin2 = jasmine.createSpy('twin brother').and.returnValue({});
    var unnamed = jasmine.createSpy(undefined).and.returnValue({});
    var skipped = jasmine.createSpy().and.returnValue({});
    expect(twin1).toHaveBeenCalled();
    expect(twin2).toHaveBeenCalled();
    expect(unnamed).toHaveBeenCalled();
    expect(skipped).toHaveBeenCalled();
});

结果:

Firefox 56.0.0 (Windows 7 0.0.0) Sample Tests. sandbox playground FAILED
    Expected spy twin brother to have been called.
    @tests/sampleTests.spec.js:37:9
    Expected spy twin brother to have been called.
    @tests/sampleTests.spec.js:38:9
    Expected spy unknown to have been called.
    @tests/sampleTests.spec.js:39:9
    Expected spy unknown to have been called.
    @tests/sampleTests.spec.js:40:9

所以,回答你的问题:

  1. 当某些断言失败时,它用于有意义的消息。
  2. 正如我们所见,框架本身不会检查它们,所以正式来说没有任何。

    但无论如何我建议引入一些约定 自己有可读和有意义的测试结果,以尽量减少 调试失败测试用例的努力。

  3. 如我们所见,这是可能的。但如前所述,我建议不要这样做。