假设您有一个包含用户和类别的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模块来保存稍后将需要的类别和状态等所有的承诺 . 主要问题是,只要满足或拒绝所有抛出的测试,茉莉花就会杀死所有过程 . 但这并没有给出足够的时间来履行承诺 .
1 回答
除非你真的需要在javascript中测试,否则你可以尝试使用Airborne.rb . 它类似于弗里斯比,没有异步问题 .