量角器:如何在转发器中检查条目是否完全发生

时间:2014-03-27 09:01:54

标签: javascript jasmine protractor

我的测试在我正在测试的应用中创建了一个新条目。测试插入一个包含时间戳的注释,以便我以后可以识别它。

在运行测试的页面上,显示数据库中所有条目的列表,每个条目旁边都有一个按钮。测试应该获得转发器,测试任务是否在那里,导航到它并单击正确的按钮。

我可以导航到该任务并单击按钮,但我对如何测试测试条目是否存在感到困惑。

it('should start a tasks', function() {

    repeater = by.repeater('task in taskList');
    tasks = element.all( repeater );

    expect( tasks.count() ).not.toBe(0);

    // ???
    // the missing piece would go here 
    // = Check if the list contains a task with the time stamped comment

    // Now in detail we single out the task an click its button to
    // perform additional tests
    tasks.map( function(elmnt, indx){               
      description = elmnt.findElement( by.className('taskDescription') );
      description.getText().then( function(text){
        if ( text.indexOf( timeStampedComment ) > -1 ) {
          console.log("Found the test entry!");
          // click the button *(1)
          // some expectation
        };
      });
    });

});

如果测试永远不会到达*(1)它会成功通过,所以我需要测试它是否到达那里或者是否有合适的条目。由于复杂的承诺结构,我不确定如何做到这一点。

I made a plunkr as requested.

我如何知道测试是否有效? (我可能在这里有一个大脑结,解决方案很明显)

编辑:我更新了plnkr以实际包含测试。如果您注释掉测试条目,您可以看到测试成功。

2 个答案:

答案 0 :(得分:2)

我是Protractor的新手,但做了类似这样的事情,为我解决了这个问题:

it('should have Juri in the list', function(){
  var data = element.all(by.repeater('person in people').column('person.name'));
  data.getText().then(function(text){
    expect(text).toContain('Juri');
  });
});

甚至更短的形式

it('should have Juri in the list', function(){
  var data = element.all(by.repeater('person in people').column('person.name'));

  expect(data.getText()).toContain('Juri');
});

(注意,在这种情况下,Protractor.expect会为您处理承诺)

答案 1 :(得分:1)

如果我理解。您希望测试列表中是否存在满足某些条件的项目,如果找不到,则会失败。您可以使用返回值maptoContain

执行此操作
var hasComment = tasks.map(function(task, index) { 
  var description = task.findElement(by.className('taskDescription'));
  return description.getText().then(function(text) {
    var hasTimeStamp = (text.indexOf(timeStampedComment) > -1);
    return hasTimeStamp;
  });
});

expect(hasComment).toContain(true);

注意return语句。这些是使promise hasComment的已解析值成为布尔测试数组的关键,每个测试都是时间戳测试的结果。