2017-01-03 6 views
0

角度テストのドキュメントでは、test sampleが表示されます。ここで$ applyがアサーションをテストする前に呼び出されます。私は同じことをしようとしたが、私のテストは適切に動作していない。壊れるはずの最初のコードは動作します...私の主張は実行されていないようです。 2番目のコードは、私のテストは動作しますが、ドキュメントとは違っています。

まず:

it('tests angular promises', function() { 
    getABC = function() { 
     return $q((resolve, reject) => { 
      resolve('abc'); 
     }); 
    }; 

    var state = getABC() 

    $rootScope.$apply() 
    // assertions come after $apply call as in documentation: doesn't work. 
    state.should.eventually.be.equal('abcc') 
}) 

------ 
✓ tests angular promises 


1 passing (78ms) 

it('tests angular promises', function() { 
    getABC = function() { 
     return $q((resolve, reject) => { 
      resolve('abc'); 
     }); 
    }; 

    var state = getABC() 

    state.should.eventually.be.equal('abcc') 
    // assertions come before $apply call: works 
    $rootScope.$apply() 
}) 

------ 
1 failing 

1) tests angular promises: 

    AssertionError: expected 'abc' to equal 'abcc' 
    + expected - actual 

    -abc 
    +abcc 

答えて

1

示すexampleが異なる場合です。

それは約束を含まない

expect(resolvedValue).toEqual(123); 

アサーションを使用しています。一方

state.should.eventually.be.equal('abcc') 

アサーションためchai-as-promised使用します。フードの下にstatethenとチェーンして値を取得し、それをアサートします。 $q約束チェーンはダイジェスト上でのみ実行されます。だからアサーションの後に$rootScope.$digest()が必要です。

chai-as-promisedで角度をテストする方法の詳細については、this answerも参照してください。

関連する問題