Frisby expectJSON包含无序列表

时间:2015-01-17 07:05:54

标签: javascript arrays node.js jasmine-node frisby.js

假设以下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 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,最后弄明白了。使用.afterJSON(),您将能够使用Jasmine的expect语法在JSON对象上执行所需的所有验证。

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

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

答案 1 :(得分:1)

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

此      .expectJSON('array。?',“1”)

变为      .expectJSON('?',{         数组:(不知道如何做这部分)     })

但是你应该能够理解为什么测试现在失败了...抱歉不是很好的frisby; p来这里寻找帮助。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

测试数组中的某些对象:

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

根据the docs