Angular 的量角器测试:如何获得列名的精确匹配

Protractor test for Angular: how to get exact match for column name

我刚开始编写量角器测试,所以我是初学者。

我正在尝试测试以下 angular 代码:

<tr ng-repeat="identifier in contentIdentifiers">
    <td>{{identifier.contentIdentifier}}</td>
    <td>{{identifier.contentIdentifierTypeDescription}}</td>
    <td>{{identifier.licensedWebsiteIdentifier}}</td>
</tr>

其中内容标识符具有以下值:

contentIdentifiers = [
    {
        contentIdentifier: '123-123-1-ABC',
        contentIdentifierTypeDescription: 'DOI',
        licensedWebsiteIdentifier: 'TEST WEBSITE'
    },
    {
        contentIdentifier: 'ABC-DEF',
        contentIdentifierTypeDescription: 'ISBN',
        licensedWebsiteIdentifier: 'TEST WEBSITE'
    },
];

这是我的相关量角器片段:

var identifier = element.all(by.repeater("identifier in contentIdentifiers").column("identifier.contentIdentifier"));
expect(identifier.get(0).getText()).toEqual("123-123-1-ABC");
expect(identifier.get(1).getText()).toEqual("ABC-DEF");

为此我得到了错误: 预期 'DOI' 等于 'ABC-DEF'。

如果我把它改成:

expect(identifier.get(2).getText()).toEqual("ABC-DEF");

然后就过去了。

从这里我认为问题是 column("identifier.contentIdentifier") 也匹配 'contentIdentifierTypeDescription'.

这个数据来自服务器,为了测试我不能改变这个。因此,我想要一个解决方案来仅获取所需列的列表。是否有获得精确列名匹配的选项?

这是通过使用 by.exactRepeater finder. It sounds a bit weird that it modifies the subsequent column method behaviour but it does 完成的。

我发现以下有效:

var identifier = element.all(by.repeater("identifier in contentIdentifiers"))
                        .all(by.exactBinding("identifier.contentIdentifier"))
expect(identifier.get(0).getText()).toEqual("123-123-1-ABC");
expect(identifier.get(1).getText()).toEqual("ABC-DEF");

它不是 .column 语法,但它的行为方式似乎相同,并给出预期的结果。