2016-08-04 4 views
1

が含まれている約束のオブジェクト私はテストネストされたコールバック

it('should retrieve a list',function(){ 
    return expect(project_list(data,res)).to.eventually.be.false 
    }) 

の下にこれが上げのように私は機能をテストしようとしている

export const project_list = function(data,res){ 
    return db.any(queries.ProjectList) 
    .then(function(results){ 
     let newResults = project_list_cleaner(results) 
     res(null,newResults) 
    }) 
    .catch(function(err){ 
     res(err) 
    }) 
} 

約束のオブジェクトを呼び出して、以下の機能を持っていますエラーは約束オブジェクトが実際に何かを返さないためです。それはresコールバックを実行します。

とにかく、約束オブジェクトがコールバックを実行するかどうかをテストするにはどうすればよいですか?

答えて

1

上記の関数がPromiseを返すという事実は、そのシグネチャには関係ありません。あなたがそれにコールバックを渡しているという事実は、プロミスを使用できないようにします。

解決方法1:あなたの関数は約束を返すお使いの機能

をリファクタリングし、それはそれです。コールバックは必要ありません。

export const project_list = function(data){ 
    return db.any(queries.ProjectList) 
    .then(function(results){ 
     return project_list_cleaner(results) 
    }); 
} 

テストは、次のようになります。

it('should retrieve a list',function(){ 
    return expect(project_list(data)).to.eventually.be.false 
}) 

解決方法2:(!しかし、あなたが本当に必要があります)あなたが機能をリファクタリングしていない。このソリューションでは約束

を無視して働きます約束は決して存在しなかった。

it('should retrieve a list',function(done){ 
    project_list(data, function(err, result){ 
    // put your assertions here 
    done(); 
    }); 
}) 
+0

これは私がproject_list関数を呼び出す上位関数を持っているということです。高次関数は、project_listに基づいてresを呼び出すか、解決するか投げますか? – Kannaj

+0

はい。プロミスを使用することができれば、私はコールバックを高く押して、できればプロミスとの非同期ワークフローのコントロールを維持することができます。 – MarcoL

+0

'res'を扱うために上位関数を作成しました。お返事ありがとうございます – Kannaj

関連する問題