有没有办法巩固'spy '在Jasmine测试中设置

Is there a way to consolidate 'spyOn' setup in Jasmine test?

本文关键字:Jasmine 测试 设置 spy 有没有      更新时间:2023-09-26

我正在用Jasmine测试Angular控制器,并监视了近十几个方法。有什么办法可以巩固间谍机构吗?我当前的设置如下:

spyOn(playersService, 'getInfo');
spyOn(playersService, 'getAccounts');
spyOn(playersService, 'getGames');
spyOn(playersService, 'getStatus');
spyOn(playersService, 'getEvents');
spyOn(viewersService, 'getViewers');
spyOn(helpersService, 'formatStats');
spyOn(helpersService, 'formatCounts');
spyOn(helpersService, 'formatValues');
spyOn(PlayerInfoController, 'slideToggle');
spyOn(PlayerInfoController, 'openModal');

Jasmine中没有任何东西允许您批量监视方法。你可以创建自己的。类似于:

function spyOnAll(object) {
    var methods = Array.prototype.slice.call(arguments, 1);
    if (methods.length) {
        for (var i = 0; i < methods.length; i++) {
            spyOn(object, methods[i]);
        }
    }
    else {
        for (var key in object) {
            if (typeof object[key] === "function") {
                spyOn(object, key);
            }
        }
    }
}

有两种调用方法。你可以显式地指定对象和方法:

spyOnAll(playerService, "getInfo",
                        "getAccounts",
                        "getGames",
                        "getStatus",
                        "getEvents",
                        "getViewers",
                        "formatStats",
                        "formatCounts",
                        "formatValues");

或者监视整个对象:

spyOnAll(playerService);

当然。

function SpyOnInjected(service) {
  for (i in arguments) {
    spyOn(service, arguments[i]);
  }
}
SpyOnInjected(playersService, 'getInfo', 'getAccounts', 'getGames', 'getStatus', 'getEvents');
SpyOnInjected(viewersService, 'getViewers');
SpyOnInjected(helpersService, 'formatStats', 'formatCounts', 'formatValues');
SpyOnInjected(PlayerInfoController, 'slideToggle', 'openModal');