純粋なJavascriptモデルをカプセル化する角度サービスを想定しましょう。これは、promise resolveを使って受け取ったのと同じパラメータを返す単純な非同期メソッドを持っています(デモ用)。コンストラクタメソッド内で発生する角度プロミスコールバックではなく、オブジェクトリテラルメソッドで発生する
angular.module('app', [])
.factory('MyModel', ['$q', function ($q) {
function MyModelConstructor() {
this.test = function(myParam) {
var deferred = $q.defer();
if (myParam) {
// Not triggering then callback
deferred.resolve(myParam);
}
return deferred.promise;
}
}
return MyModelConstructor;
}]);
テストメソッドを呼び出した後、コールバックはトリガされません。しかし、私はコンストラクタによって作成されたオブジェクトリテラルとして試験方法を添付した場合、すべてが正常に動作します:
it('should not fail!!!', function() {
myModelExample = new MyModel();
var result;
expect(result).toBeUndefined();
myModelExample.test(111).then(function(funresult) {
result = funesult;
});
$rootScope.$apply();
expect(result).toBe(111); // But it fails
});
it('should have working promise', function() {
myModelExample = new MyModel();
var result;
expect(result).toBeUndefined();
myModelExample.test = function(myParam) {
var deferred = $q.defer();
if (myParam) {
deferred.resolve(myParam);
}
return deferred.promise;
}
myModelExample.test(111).then(function(funresult) {
result = funresult;
});
$rootScope.$apply();
expect(result).toBe(111); // This way does not fail
});
コンストラクタ作成方法とリテラル1間のコールバックをトリガするという点で違いは何ですか?コンストラクタに添付されたテストメソッドは、どのようにコールバックをトリガできますか? 、そう
myModelExample = new MyModel();
Plnkrタイプミス
result = funesult;
そして、あなたは、テスト内myModelExample
を定義していない:
Here is a Plunker with the example
どのように 'test'メソッドを呼び出すのですか?その議論は真実ですか? 'deferred.resolve(myParam);'文が実行されていますか? – georgeawg