1

私はカルマテストのためにストライプオブジェクトをモックする際に問題を抱えています。これは最初にロードされたスクリプト(角ストライプの前)でなければなりません。角カルマテストでストライキを模倣する

私は私のカルマの設定でスクリプトでこれをロードしています:

var stripe = new function() {   
    this.setPublishableKey = function(key) {}     
} 

Object.defineProperty(window, 'Stripe', { value: stripe, configurable: true, enumerable: true, writable: true }); 

これは私がプロトタイプの方法を試してみましたが、それは私がこの方法を追加したメソッドを認識しませんAttempting to configurable attribute of unconfigurable property

を与えます。

window.Stripe = function(); 
window.Stripe.prototype.setPublishableKey = function() {} 

これは与える:私はこの方法は、オブジェクトのように最後に

(Iは角ストライプでwindow.Stripeをダンプするとき、それは方法を示しているdoesntの)存在しないにトレースしていると信じてundefined is not a constructor (evaluating 'stripeProvider.setPublishableKey(config.stripeId)')

window.Stripe = { 
... 

収量:Stripe must be available as window.Stripe。それは角度ストライプのように特別に機能が必要です。

stripeファイルをローカルにコピーした場合、どのようなストライプが動作しますか?私はstripe.comにいないことについて他のエラーが発生するので、私はそれを嘲笑したいと思います。

ソリューションおかげで私はこの角度の方法を解決することができた@estusします

angular.module('angular-stripe', []).provider('stripe', { 
    setPublishableKey: function() { }, 
    $get: function() {} 
}) 
beforeEach(module('app')); 

上記本当のストライプに不足しているエラーをスローせずにangular-stripeロードを無効にするのに十分です。

答えて

1

角ストライプはultrathin wrapper around Stripe globalです。 Angular DIの主な利点の1つは、テスト容易性です。

ストライプそのものではなく模擬角ストライプユニットですが、まさにこのためです。

module('app', ($provide) => { 
    $provide.provider('stripe', function() { 
    this.setPublishableKey = jasmine.createSpy(); 
    this.$get = jasmine.createSpy(); 
    }); 
}); 
+0

わかりません。角ストライプファイルを含まない場合、私のコードがapp.jsにロードする角ストライプモジュールをモックする必要があります。これはどのようにこれを処理しますか? – cyberwombat

+0

私はこれについてここに直接質問を投稿しましたhttp://stackoverflow.com/questions/37094761/how-to-mock-a-module-in-angular – cyberwombat

+0

角ストライプは小さく、 'Stripe'サービス( 'Stripe'サービスを使用した' stripe'サービス)を提供しています。角度ストライプモジュールを完全または部分的に置き換えることは自由です。 Stripeグローバル 'module ''アプリケーション '、'角ストライプ '、($提供)=> {$ provide.constant(' Stripe '、MockedStripe)})'で十分であるかもしれません。 – estus

関連する問題