Frisby expectJSON 包含无序列表

Frisby expectJSON containing unordered list

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

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

字符串数组可以 return 以任何顺序排列,例如 ["3", "1", "2"]

如何在不期望顺序的情况下期望上面定义的数组?

我试过了

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

但这不是有效的语法,会出现以下错误:

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

测试数组中的某些对象:

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

根据the docs

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

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

成为 .expectJSON('?', { 阵列:(不知道如何做这部分) })

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

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

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

我遇到了同样的问题,终于弄明白了。使用 .afterJSON(),您将能够使用 Jasmine 的期望语法对 JSON 对象执行所有您想要的验证。

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

    .afterJSON(function(json){
        expect(json.array).toContain('1');
        expect(json.array).toContain('2');
        expect(json.array).toContain('3');
    })