简单认识Javascript测试框架Jasmine中的Spies

2017-08-18  本文已影响0人  小焲

Spy用来追踪函数的调用历史信息(是否被调用、调用参数列表、被请求次数等)。Spy仅存在于定义它的describe和it方法块中,并且每次在spec执行完之后被销毁。
当在一个对象上使用spyOn方法后即可模拟调用对象上的函数,此时对所有函数的调用是不会执行实际代码的。
两个Spy常用的expect:

  1. toHaveBeenCalled: 函数是否被调用
  2. toHaveBeenCalledWith: 调用函数时的参数
describe("A spy", function() {
        var foo, bar = null;

        beforeEach(function() {
            foo = {
                setBar: function(value) {
                    bar = value;
                }
            };
            spyOn(foo, "setBar"); // 在foo对象上添加spy
            // 此时调用foo对象上的方法,均为模拟调用,因此不会执行实际的代码
            foo.setBar(123); // 调用foo的setBar方法
            foo.setBar(456, "another param");
        });

        it("tracks that the spy was called", function() {
            expect(foo.setBar).toHaveBeenCalled(); //判断foo的setBar是否被调用
        });

        it("tracks all the arguments of its calls", function() {
            expect(foo.setBar).toHaveBeenCalledWith(123); //判断被调用时的参数
            expect(foo.setBar).toHaveBeenCalledWith(456, "another param");
        });

        it("stops all execution on a function", function() {
            expect(bar).toBeNull();  // 由于是模拟调用,因此bar值并没有改变
        });
    });

常用跟踪属性

除了上面提到的最常用的两种,还有以下

其他跟踪属性

spy的任何调用都可以使用calls 属性跟踪

参考资料:
Javascript测试框架Jasmine(五)
Jasmine入门(结合示例讲解)

上一篇 下一篇

猜你喜欢

热点阅读