0

假设下面的 JSON 是 Frisby 测试的一部分:

{
    array: ["1", "2", "3"]
}

字符串数组可以按任何顺序返回,比如["3", "1", "2"].

我怎么能期待上面定义的数组而不期待订单?

我努力了

.expectJSON('array.?', "1")
.expectJSON('array.?', "2")
.expectJSON('array.?', "3")

但这不是有效的语法,并且会发生以下错误:

 TypeError: Expected valid JavaScript object to be given, got undefined
4

4 回答 4

2

我遇到了同样的问题,终于弄清楚了。使用 .afterJSON(),您将能够使用 Jasmine 的 expect-syntax 对 JSON 对象进行您想要的所有验证。

对于您的示例,脚本将如下所示:

    .afterJSON(function(json){
        expect(json.array).toContain('1');
        expect(json.array).toContain('2');
        expect(json.array).toContain('3');
    })
于 2015-11-18T13:38:49.437 回答
1

你想清楚了吗?我想我有点晚了,但我很确定这是因为 .expectJSON 期待一个 JSON 对象。

这个 .expectJSON('array.?', "1")

变成 .expectJSON('?', { array: (不知道怎么做这部分) })

但是您应该能够理解为什么现在测试失败了……抱歉,还不是很好的 frisby ;p 我自己来这里寻求帮助。

于 2015-06-02T19:10:18.530 回答
1

将响应读取为文本而不是对象,并在文本中查找所需的数组项。IE。.expectBodyContains ('1') .expectBodyContains ('2') .expectBodyContains ('3')

现在您必须小心,因为您有多个具有相同可能值的数组,但是使用 JSON.stringify 和简单的字符串操作,您应该能够隔离所需的数组。

于 2015-06-04T19:05:05.867 回答
0

要测试数组中的某些对象:

.expectJSON('array.?', '1')
.expectJSON('array.?', '2')
.expectJSON('array.?', '3')

根据文档

于 2015-01-17T07:17:01.317 回答