我有一个在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?
答案 0 :(得分:0)
我不确定这会解决您的问题,但您是否尝试为该特定电话添加间谍?例如:
it('my test name', inject(function ($window) {
spyOn($window.intlTelInputUtils, 'getExtension');
...
}));
并且您需要确保在代码上使用$window
,而不是直接使用window
。