2016-05-19 15 views
0

私は私のプロジェクトでaxiosを使用してサーバーの接続を確立するために、次のコードを持っている:モジュールの輸出コールバック

axios.get('/someurl') 
    .then(function (response) { 
     console.log(response); 
    }.bind(this)) 
    .catch(function (response) { 
     console.log(response); 
    }); 

私はテストフレームワークとして冗談を使用していますが、私は成功しaxiosを嘲笑、私は、この当時の機能に問題がある:

module.exports = { 
    get: function(a) 
    console.log(a); 
    console.log(b); 
    return "abc"; 
    } 
} 

テストを実行する場合しかし、私は次のようなエラーメッセージが出ます:

TypeError: _axios2.default.get(...).then is not a function

どういうわけか、それが存在していることを伝える方法を見つけなければならず、関数でなければなりません。私はmodule.exportsでこれを行う必要があります。これを行う方法に関するアイデア?

+0

約束は 'then'機能を持っている:あなたは、このモジュールを使用しているときのように

module.exports = { get: function(a) { return new Promise(function(resolve, reject) { // Wait some period of time setTimeout(function() { // 'abc' + a is passed to the 'then' function resolve('abc' + a); }, 1000); }); } }; 

はその後、それはのように簡単です。あなたのモックアップされた機能はプロミスを返す必要があります。 –

+0

それで、自分自身を嘲笑する必要はないのですか? –

+0

右。 'get'関数からPromiseを返すだけです。 –

答えて

1

get関数がPromiseを返すと予想されるようです。それはthen機能が意味するものです。

module.exports = { 
    get: function(a) { 
    return new Promise(function(resolve, reject) { 
     console.log(a); 
     console.log(b); 
     resolve('abc'); 
    }); 
    } 
}; 

それとも、あなたはそれが常に成功することを知っていれば、あなたはPromise.resolveを使用して、それを簡素化することができます:

module.exports = { 
    get: function(a) { 
    console.log(a); 
    console.log(b); 
    return Promise.resolve('abc'); 
    } 
}; 

偉大なことを行うには、このような何かにあなたのgetモックアップを変更することができますPromisesに関することは、非同期プロセスを単純化することです。モックアップの場合、これだけで十分ですが、この同じプロセスを非同期値の処理に使用できます。

var axios = require('./my-mockup.js'); 
axios.get('def') 
.then(function(response) { 
    console.log(response); // 'abcdef' 
});