1

私のアプリでkarmaテスト仕様を実行しようとすると、次のエラーが発生します。

 Error: [$injector:modulerr] Failed to instantiate module adf.widget.tabularWidget due to: 
     Error: Failed to execute 'atob' on 'Window': The string to be decoded is not correctly encoded. 
      at Error (native) 
      at C:/Users/dell%20pc/Documents/Work/Client/widgets/TabularWidget/src/ta 
bularWidget.js:22:43 
      at Object.invoke (C:/Users/dell%20pc/Documents/Work/Client/bower_compone... 

ここで問題となるのは、テストを実行するとウィンドウプロパティをモックすることができないということです。この問題が発生したファイル..

'use strict'; 
(function (windows, angular, $, _) { 

    angular.module('adf.widget.tabularWidget') 
     .config(function (dashboardProvider) { 

      //more code 

      //issue line 
      var widgetDefsApiUrl = window.atob(window.api) + 
       "Widget/definitions?access_token=" + window.atob(window.acstkn); 

     }); 

})(window, angular, $, _); 

を以下に示しますが、私はちょうどその行をコメントアウトするとき、すべてのテストケースは、すべての問題なしで大丈夫実行します。だから私が何とかwidgetDefsApiUrlを嘲笑して、それを私のテストケースに注入すれば、私の問題は解決されるだろう。しかし、私はそれを行う方法がわかりません。誰でも正しい方向に向けることができますか?

編集: 私はこの問題を切り分けました。問題はwindow.apiはここでは定義されていないため、window.atob()がエラーを出します。どのように私はこの問題を克服するだろうか?

答えて

2

解決策が見つかりました。 beforeEachブロック内でウィンドウオブジェクトをモックするだけで済みます。

beforeEach(function() { 
     var window = {}; 
     window.api = "windowsapitoken"; 
     window.acstkn = "windowsacsapitoken"; 

)}; 
3

ウィンドウオブジェクトを直接取得し、そのオブジェクトにプロパティとメソッドを添付できます。

beforeEach(function() { 
     window.api = function() {}; 
     window.atob = function() {}; 
)}; 
関連する問題