【问题标题】:Why do I have to call spyOn in a beforeEach()?为什么我必须在 beforeEach() 中调用 spyOn?
【发布时间】:2012-11-20 19:00:30
【问题描述】:

我有一个简单的测试套件,里面有一个it 函数。我想看看在我正在调用的函数中是否调用了某个函数,所以我有这样的东西:

describe("doStuff", function () {
    var foo = new Foo();
    spyOn(foo, "doOtherStuff");
    foo.doStuff(true);
    it("should do stuff and other stuff", function() {
        expect(foo.stuffDone).toBe(true);
        expect(foo.doOtherStuff).toHaveBeenCalled();
    });
});

但是,这给了我错误:Expected a spy, but got Function.

环顾四周后,我看到所有示例在beforeEach 中都有spyOn。因此,我将测试更改为:

describe("doStuff", function () {
    var foo = new Foo();
    beforeEach(function() {
        spyOn(foo, "doOtherStuff");
        foo.doStuff(true);
    });
    it("should do stuff and other stuff", function() {
        expect(foo.stuffDone).toBe(true);
        expect(foo.doOtherStuff).toHaveBeenCalled();
    });
});

这很有效。我对茉莉花很陌生,所以我可能只是遗漏了一些明显的东西,但我只想知道为什么它必须在beforeEach 中才能使spyOn 工作。使用beforeEach 很容易,但我想更好地了解发生了什么。谢谢。

【问题讨论】:

    标签: javascript unit-testing jasmine


    【解决方案1】:

    这仅仅是因为 Jasmine 在不同的闭包中运行 Specs。 describeit 调用仅注册回调,这些回调将添加到队列中,然后由 Jasmine 稍后执行。而且茉莉总是清理间谍……

    但您也可以将spyOn 添加到it 回调中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      • 1970-01-01
      • 2013-04-15
      • 2022-01-17
      • 2016-06-09
      • 2017-01-16
      相关资源
      最近更新 更多