如何用更多的"期望“;功能
How to extend frisby.js with more "expect" functions?
有没有办法用自定义expect
方法扩展Frisby.js模块?我不想修改源代码,这些扩展是特定于我的REST API的。我的目标是通过将它们组合成一个方法来避免重复常见的测试。
问题是Frisby.js模块导出其方法时使用以下代码:
exports.create = function(msg) {
return new Frisby(msg);
};
我该如何向Frisby添加新方法?这更像是一个Javascript继承问题,因为它适用于Node.js模块。
例如,用于测试StackExchange API的脚本会有很多重复的.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原型中呢?
我提出了一个基本上是Frisby.js包装器的解决方案。在一个新的Node模块(我称之为config.js
)中,它扩展了create()
函数:
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
这个模块:
var config = require('./config.js');
var frisby = config.frisby;
在这之后,我可以写:
frisby.create('StackOverflow Info')
.get('https://api.stackexchange.com/2.2/info?site=stackoverflow', {gzip: true})
.expectSEwrapper()
.toss();
相关文章:
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- 为什么jasmine期望不验证是否抛出了错误
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- Javascript测试:传递Jasmine 2.0的“完成”功能 - 不是我所期望的
- 如何用更多的"期望“;功能
- Microsoft JScript运行时错误:期望的功能
- JavaScript '不是函数'Vs. '期望功能'
- Jasmine期望在backbone.view上调用间谍功能
- ng-click功能不像我期望的那样工作(或根本不工作)