2015-09-01 21 views
1

我想评估是否从一个表(table.getData())是一个2D数组返回的数据包含另一个数组。断言数组包括Chai

在控制台中,期望的数据出现在从table.getData()调用返回的2D数组中,但断言失败。

this.Then(/^I see my account balances as follows:$/, function (tableData, done) { 
     var balanceAggregationPage = new BalanceAggregationPage(this.app.pagesContainer), 
      table = balanceAggregationPage.getAccountsTable(); 

     var rows = tableData.getRows(); 
     rows.shift(); 

     var actualBalances = []; 
     rows.syncForEach(function (item) { 
      var row = item.raw(); 
      row[7] = moment(parseInt(row[7], 10)).format('DD MMM YYYY hh:mm'); 

      actualBalances.push(row); 
     }); 
     exp(table.getData()).to.eventually.include(actualBalances).notify(done); 
    }); 

任何人都可以帮忙吗? 谢谢

回答

1

您可以结合包括members()

断言目标是集合的超集,或者目标和集合具有相同的严格等于(===)的成员。或者,如果设置了深度标志,则会比较集合成员的深度平等。

你的说法就变成了:

exp(table.getData()).to.eventually.deep.include.members([actualBalances]); 

使用标志以确保柴会会比较两个数组的深层内容。

此外,只有当数组内的顺序相同时,这才会起作用。你可能想要对它们进行排序。

I wrote a small example here这就是你想要的。它使用'should'接口而不是'expect',但这并不重要。

+0

这其实很好。我不知道。我正在删除我的答案,以支持你的答案。谢谢! –

+0

对我而言,不幸的是我的数据是作为黄瓜TableData对象传递给我的:thenCatch:[Function], thenFinal:[Function], addCallback_:[Function]}作为数组 – Joly

+0

哦,我被你在问题中讨论数组的事实所误导。 事实上,如果你的数据是一个对象而不是数组,那么它将不起作用,因为** include仅适用于字符串或数组**。不幸的是,我根本不知道黄瓜,所以我不知道它是如何工作的。 也许你可以将你的TableData对象转换为*真实*数组? – noKid