Frisby.js モジュールをカスタムexpect
メソッドで拡張する方法はありますか? ソース コードを変更したくありません。これらの拡張機能は REST API に固有のものです。私の目標は、共通のテストを 1 つのメソッドにまとめることで、繰り返さないようにすることです。
問題は、Frisby.js モジュールが次のコードでメソッドをエクスポートしていることです。
exports.create = function(msg) {
return new Frisby(msg);
};
Frisby に新しいメソッドを追加するにはどうすればよいですか? これは、Node.js モジュールに適用されるため、Javascript の継承に関する質問です。
たとえば、StackExchange APIをテストするスクリプトには、 andなどの多くの重複.expect
句が.expectHeader()
あり.expectJSONTypes()
ます。.expectSEwrapper()
これらをメソッドにまとめたいと思います。このメソッドは StackExchange API に固有のものであるため、Frisby.js には属しません。スクリプトは次のようになります。
var frisby = require('frisby');
frisby.create('StackOverflow Info')
.get('https://api.stackexchange.com/2.2/info?site=stackoverflow', {gzip: true})
.expectStatus(200)
.expectHeader('content-type', 'application/json; charset=utf-8')
.expectHeader('content-encoding', 'gzip')
.expectJSONTypes('', {
items: Array,
has_more: Boolean,
quota_max: Number,
quota_remaining: Number
})
.toss();
frisby.create('StackOverflow Badges')
.get('https://api.stackexchange.com/2.2/badges?order=desc&sort=rank&site=stackoverflow', {gzip: true})
.expectStatus(200)
.expectHeader('content-type', 'application/json; charset=utf-8')
.expectHeader('content-encoding', 'gzip')
.expectJSONTypes('', {
items: Array,
has_more: Boolean,
quota_max: Number,
quota_remaining: Number
})
.expectJSONTypes('items.0', {
badge_type: String,
award_count: Number,
rank: String,
badge_id: Number,
link: String,
name: String
})
.toss();
スクリプトを次のようにしたいと思います。
frisby.create('StackOverflow Info')
.get('https://api.stackexchange.com/2.2/info?site=stackoverflow', {gzip: true})
.expectSEwrapper()
.toss();
frisby.create('StackOverflow Badges')
.get('https://api.stackexchange.com/2.2/badges?order=desc&sort=rank&site=stackoverflow', {gzip: true})
.expectSEwrapper()
.expectJSONTypes('items.0', {
badge_type: String,
award_count: Number,
rank: String,
badge_id: Number,
link: String,
name: String
})
.toss();
これは、次のような新しいメソッドを追加することを意味します。
frisby.expectSEwrapper = function() {
return this.expectStatus(200)
.expectHeader('content-type', 'application/json; charset=utf-8')
.expectHeader('content-encoding', 'gzip')
.expectJSONTypes('', {
items: Array,
has_more: Boolean,
quota_max: Number,
quota_remaining: Number
});
しかし、スクリプト内から Frisby プロトタイプに追加するにはどうすればよいでしょうか?