当满足承诺时,运行frisby测试
Run frisby test when promise is satisfied
假设您有一个包含用户和类别的API。每个用户必须有一个类别和一个地位。
目前,你必须有像
这样的东西frisby.create("Get categories")
.get("http://api/category")
.expectStatus(200)
.expectJSON("*",{...})
.afterJSON(function(categories)
{
frisby.create("Get status list")
.get("http://api/status")
.expectStatus(200)
.expectJSON("*",{...})
.afterJSON(function(statusList){
var luckyCategory = chooseLuckyCategory(categories);
frisby.create("Create new user")
.post(
"http://api/user",
{
name : "John",
category : luckyCategory
})
.expectStatus(202)
.toss();
})
.toss();
})
.toss();
那太可怕了。如果我需要一个新的测试,需要检索我的类别,我必须重复上面的几乎所有代码,或者将新测试链接到其中。它不会是简单点,否则我得重复一遍。
这样会好很多:
var categoriesP = q.defer();
var statusListP = q.defer();
var categories, statusList;
frisby.create("Get categories")
.get("http://api/category")
.expectStatus(200)
.expectJSON("*",{...})
.afterJSON(function(result)
{
categories = result;
categoriesP.resolve(result);
})
.toss();
frisby.create("Get status list")
.get("http://api/status")
.expectStatus(200)
.expectJSON("*",{...})
.afterJSON(function(result){
statusList = result;
statusListP.resolve(result);
})
.toss();
q.all([categoriesP.promise, statusListP.promise])
.then(function()
{
var luckyCategory = chooseLuckyCategory(categories);
var happyStatus = chooseHappyStatus(status);
frisby.create("Create new user")
.post(
"http://api/user",
{
name : "John",
category : luckyCategory
})
.expectStatus(202)
.toss();
});
代码不那么复杂,我保证可以重用。我甚至可以创建一个nodejs模块来保存所有的承诺,如类别和稍后将需要的状态。主要的问题是茉莉花杀死了所有的一旦所有抛抛试验都被满足或拒绝,就立即进行处理。但这并没有给承诺足够的时间来实现。
除非你真的需要在javascript中测试,你可以尝试使用Airborne.rb。它类似于Frisby,只是没有异步问题。
相关文章:
- 如何使用phaser使html5游戏在移动设备浏览器上运行
- 使用压缩的JavaScript文件(不是运行时压缩)
- Javascript运行php文件,然后下载文件
- chrome扩展:尽管运行了at:documentidle,js脚本还是过早启动
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Angularjs代码未在匿名函数中运行
- jquery设置为使用参数运行
- 如何根据时间运行不同的脚本
- Meteor方法在客户端返回null,在客户端运行的相同方法返回正确的值
- 将文本框链接到由按钮运行的javascript公式
- 为什么不是't运行此Javascript的Chrome
- ng应用程序使脚本无限运行
- 如何在运行时在angular 2中加载外部js脚本
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- JavaScript错误:Microsoft JScript运行时错误:应为对象
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- 让 Frisby.js 测试同步运行
- 如何使用 frisby 运行特定测试
- 当满足承诺时,运行frisby测试
- 将数据存储在一个变量中,以便在运行frisby测试之前在REST API路由中作为参数使用