【发布时间】:2014-08-21 02:25:11
【问题描述】:
假设您有一个包含用户和类别的 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 模块来保存诸如 category 和 稍后将需要的状态。主要问题是茉莉花杀死了所有 一旦所有抛出的测试都得到满足或拒绝,就立即处理。但这并没有为兑现承诺提供足够的时间。
【问题讨论】:
标签: javascript node.js rest jasmine automated-tests