如何让jasmine测试忽略parent.window上的某些内容?

时间:2016-09-06 12:47:46

标签: angularjs typescript jasmine

我有一个在iframed窗口中运行的Typescript / Angular应用程序。在应用中,我使用intl-tel-input模块格式化&验证我们的电话号码输入。 Intl-tel-input将< intlTelInputUtils' $ window对象上的函数。在没有iframe的情况下在本地测试应用程序时,我能够成功调用类似的方法(注意周围的窗口只是为了满足Typescript编译器:

(<any>window).intlTelInputUtils.getExtension(phoneNumber.userInput, phoneNumber.countryCode);

并通过模拟window.intlTelInputUtils对象来获取要传递的测试:

$window.intlTelInputUtils = {
            'getExtension': function () { return ''; },
            'formatNumber': function () { return ''; },
            'isValidNumber': function () { return true; }
        };

但是,当我们进入嵌入式iframe窗口时,这当然不起作用。 IntlTelInputUtils现在出现在parent.window.intl ....

我尝试将方法调用更改为:

(<any>parent.window).intlTelInputUtils.getExtension(phoneNumber.userInput, phoneNumber.countryCode);

但是我无法将其推送到服务器以查看是否可以工作(将它?),直到我能够通过Jasmine测试。我尝试将模拟更改为:

$parent.$window = {
            'intlTelInputUtils': {
                'getExtension': function () {
                    return '';
                },
                'formatNumber': function () {
                    return '';
                },
                'isValidNumber': function () {
                    return true;
                }
            }
        };

但我意识到这是不正确的。

如何在我的测试中正确模拟parent.window.intlTelInputUtils?

1 个答案:

答案 0 :(得分:0)

我不确定这会解决您的问题,但您是否尝试为该特定电话添加间谍?例如:

it('my test name', inject(function ($window) {
     spyOn($window.intlTelInputUtils, 'getExtension');

     ...

}));

并且您需要确保在代码上使用$window,而不是直接使用window