2016-05-27 11 views
2

現在、wit.aiのAPIラッパーを作成しています。私はこのラッパーにテストを追加したいと思いますが、私はhttpライブラリを使ってHTTPリクエストを送信しているので、どのようにすればよいか分かりません。ダーツAPIラッパーのテスト

コードは次のようになります。

このコードを考えると
Future message(String q) { 
    Map<String, String> headers = { 
     'Accept': 'application/vnd.wit.${apiVersion}+json', 
     'Authorization': 'Bearer ${token}' 
    }; 
    return http 
     .get('https://api.wit.ai/message?q=${q}', headers: headers) 
     .then((response) { 
     return JSON.decode(response.body); 
    }).catchError((e, stackTrace) { 
     return JSON.decode(e); 
    }); 
    } 

、私は実際にHTTPリクエストを送信しないテストを書くでしょうか?

答えて

4

これは伝統的に依存性注入によって解決されます。デフォルト値は、通常、ユーザーがClientの作成を心配する必要はないことを意味して名前付き引数を使用して

class MyWrapper { 
    final http.BaseClient _httpClient; 
    MyWrapper({BaseClient httpClient: new http.Client()}) 
     : _httpClient = httpClient; 

    // ... 
} 

:あなたのAPIのラッパークラスのようなコンストラクタを持つことができます。あなたの方法で

は、あなたの代わりにhttpライブラリの静的メソッドを使用してのClientを使用します。

Future message(String q) { 
    Map<String, String> headers = { 
    'Accept': 'application/vnd.wit.${apiVersion}+json', 
    'Authorization': 'Bearer ${token}' 
    }; 
    return _httpClient 
     .get('https://api.wit.ai/message?q=${q}', headers: headers) 
     .then((response) { 
    return JSON.decode(response.body); 
    }).catchError((e, stackTrace) { 
    return JSON.decode(e); 
    }); 
} 

は、クライアントがクローズする必要があること、しかし、覚えておいてください。 APIラッパーにcloseメソッドがない場合は、a)それを追加するか、またはb)コンストラクターではなくmessage()メソッドに依存性注入を挿入することができます。

テストするときは、set up a MockClientです。そのように渡す:

var wrapper = new MyWrapper(httpClient: myMockClient); 

ローカルサーバーを実行する必要はありません。

関連する問題