Javascript 为什么我必须在beforeach()中调用spyOn?
我有一个简单的测试套件,里面有一个Javascript 为什么我必须在beforeach()中调用spyOn?,javascript,unit-testing,jasmine,Javascript,Unit Testing,Jasmine,我有一个简单的测试套件,里面有一个it函数。我想看看在我调用的函数中是否调用了某个函数,因此我有如下内容: describe("doStuff", function () { var foo = new Foo(); spyOn(foo, "doOtherStuff"); foo.doStuff(true); it("should do stuff and other stuff", function() { expect(foo.stuffDon
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();
});
});
但是,这给了我一个错误:预期是间谍,但得到了函数。
在查看了一些示例后,我看到所有示例都在每个示例之前的中有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();
});
});
这是有效的。我对jasmine很陌生,所以我可能只是缺少了一些明显的东西,但我只是想知道为什么它必须在每次
之前都在一个中才能让spyOn
工作。在每次
之前只使用是很容易的,但我想更好地了解发生了什么。谢谢。这只是因为Jasmine以不同的方式运行规范。descripe
和it
只调用添加到队列中然后由Jasmine稍后执行的注册回调。茉莉花总是清理间谍
但是您也可以将spyOn
添加到it
回调中