2016-06-17 5 views
0

角度とジャスミンには新しい。私はsave()メソッドを持っています。これは私がテストしている私のコントローラーで単体テストにしたいのです。私が以前にselect()を行ったときに定義されたいくつかの変数を設定します(これは、基本的に、UIが行をクリックしたときに呼び出されるメソッドです)。ここでは抜粋です:ジャスミンテスト異なる方法で記述された変数を設定するメソッド

function select(row){ 

     vm.selected.row = row; 
     vm.someValue = false; 
} 

そして今、私は機能save()

function save(){ 

     if(vm.selected.row == 1) 
     { 
      //doSomething 
     } 
     vm.someSaveValue = vm.someValue; // assigning vm.someSaveValue to the value I set to false in select method above 
} 

を持っている。しかし、私は保存()メソッドのユニットテストを書く場合、私は私がで作成した変数にアクセスすることができません。 select()メソッド。任意の手がかりをどのように達成するために?ここで は私のサンプルテストスニペット明らか

describe('Test someValue setting', function(){ 
      it('test someValues', function (done) { 
       vm.save().then(function() { 
        spyOn(vm.select) // maybe this way, but how to access the variables this sets to ?????? 

        expect(vm.someValue).toEqual('true'); 
       }); 
       scope.$apply(); 
       done(); 
      }); 

     }); 

である私は私のテストを実行すると、それは私のメインコントローラメソッドsave()に達したが、It vm.selected.row is undefinedと失敗したと言ってエラー。何か案が ?

ありがとうございました。

答えて

0

saveを呼び出す前に、他のメソッドを呼び出します。

describe('Test someValue setting', function(){ 
     it('test someValues', function (done) { 
      vm.select(1); 
      vm.save().then(function() { 
       spyOn(vm.select) // maybe this way, but how to access the variables this sets to ?????? 

       expect(vm.someValue).toEqual('true'); 
      }); 
      scope.$apply(); 
      done(); 
     }); 

    }); 
+0

これは 'vm.select(1)'が実行されているので動作しませんが、save()の 'it(....)でテストしているときには、変数。 – noobcoder

+0

グローバル変数の場合はアクセス可能でなければなりません。それ以外の場合は、そのメソッドのスパイを作成し、spyOn(test、 "save");結果を返します。 – Yogesh

+0

あなたは詳しく教えてもらえますか?それともスニペットを提供しますか? – noobcoder

1

本当に単体テストではありません。 save()関数を単独でテストする必要があります。それが別の関数の値に依存している場合は、もはやユニットテストではありません。

ifブロック内でテストするには、vm.selected.rowの値を手動で設定する必要があります。 vm.someValueも同じです。 vm.SomeSaveValueの値が期待どおりであることをテストする必要があります。vm.someValueの値ではありません。ここで私が何を意味するかの例です:

it('should set the value of vm.SomeSaveValue to false', function() { 
    vm.someSaveValue = true; 
    vm.someValue = false; 
    vm.selected.row = 2; 

    vm.save() 

    expect(vm.SomeSaveValue).toEqual(false); 
} 

か、のような何かをするだろうあなたのifブロック内に何かをテストするために:

it('should do something', function() { 
    vm.selected.row = 1; 

    vm.save(); 

    expect('something done in if block').toBe('some value'); 
} 

これは、あなたのテストからあなたの選択機能の依存関係を削除します。 save関数が実際にselect()を呼び出した場合は、スパイとand.CallFake()オプションを使用する必要があります。

関連する問題