首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用更多的“期望”函数扩展frisby.js?

如何用更多的“期望”函数扩展frisby.js?
EN

Stack Overflow用户
提问于 2015-11-24 21:44:33
回答 1查看 768关注 0票数 1

有办法用自定义的Frisby.js方法扩展expect模块吗?我不想修改源代码,这些扩展是特定于我的REST的。我的目标是通过将普通测试组合成一个方法来避免重复它们。

问题是,Frisby.js模块使用以下代码导出其方法:

代码语言:javascript
复制
exports.create = function(msg) {
  return new Frisby(msg);
};

我将如何向Frisby添加新方法?这更像是一个Javascript继承问题,因为它适用于Node.js模块。

例如,测试StackExchange API的脚本会有很多重复的.expect子句,比如.expectHeader().expectJSONTypes()。我想将它们组合成一个.expectSEwrapper()方法。此方法是StackExchange API的唯一方法,因此它不属于Frisby.js。脚本将如下所示:

代码语言:javascript
复制
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();

我希望脚本看起来更像这样:

代码语言:javascript
复制
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();

这意味着添加一个如下所示的新方法:

代码语言:javascript
复制
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原型中呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-30 18:52:28

我想出了一个基本上是Frisby.js包装器的解决方案。在一个新的Node模块(我称之为config.js)中,它扩展了create()函数:

代码语言:javascript
复制
var frisby = require('frisby');

// Customize Frisby.js for the StackExchange REST API
exports.frisby = {
    create: function(describe) {
        var _frisby = frisby.create(describe);

        _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
                       });
        }
        return _frisby;
    }
}

然后,在我的Frisby.js规范文件中,我require这个模块:

代码语言:javascript
复制
var config = require('./config.js');
var frisby = config.frisby;

在此之后,我可以写:

代码语言:javascript
复制
frisby.create('StackOverflow Info')
  .get('https://api.stackexchange.com/2.2/info?site=stackoverflow', {gzip: true})
  .expectSEwrapper()
  .toss();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33904433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档