如何在Angular端到端测试中修改数组模型?

时间:2013-12-05 21:41:57

标签: javascript arrays angularjs testing end-to-end

我有一个角度应用程序,它在控制器中定义了一个表,如下所示:

$scope.rowHeaders = ["Revenues","Costs","Profit"];
$scope.data = [[100,230,300,400,500,600,700,800,900,1000,1100,1200], [30,40,50,60,70,80,90,100,110,120,130,140], [70,160,250,340,430,540,630,720,810,900,990,1100]];

rowHeaders应用于 data 对象中的每一行。它连接到模板,如下所示:

    <tbody>
      <tr ng-repeat="row in rowHeaders track by $index">
        <td>{{row}}</td>
        <td ng-repeat="cellData in data[$index] track by $index">
          <input id="data{{$parent.$index}}_{{$index}}" type="text" class="clsinputboxes" ng-model="data[$parent.$index][$index]" name="data{{$parent.$index}}_{{$index}}" ng-blur="updateColor($parent.$index, $index, data[$parent.$index][$index])" style="background-color: {{color[$parent.$index][$index]}}">
        </td>
      </tr>
     </tbody>

这会生成一个带输入框的简单表。当框中的输入发生变化时,框的背景颜色也会随着控制器中指定的updateColor()内的代码而改变。

所有这一切都很好。我希望能够编写一个简单的端到端测试,它将更改表中其中一个框的内容,然后检查updateColor()函数是否被正确触发(可能通过检查背景颜色确实改变了)。这被证明是非常难以做到的。

我曾经想过一些简单的事情应该有效:

input("data[1][1]").enter(20);

但这实际上不起作用,我收到以下错误:

http://localhost:8000/test/e2e/scenarios.js:17:4
Selector [ng\:model="data[1][1]"] did not match any elements.

然而,代码在不处于测试模式时工作正常,并且使用ng-model =“data [$ parent。$ index] [$ index]”在输入标记中正确绑定模型。

对于端到端测试,如何将表格中的某些数据输入到链接到数组模型的表格中?

我也尝试了以下(虽然我更喜欢使用input()。enter()):

element("#data1_1").query(function(el, done) {
      el.click();
      el.val(20);
      done();
  });

这会更改框内容,但不会触发updateColor()。我也试过把e1.blur() - 这也不起作用。

1 个答案:

答案 0 :(得分:0)

我终于能够在Angular优雅的端到端场景运行中使用它。

首先,我给表标签一个id - “inputTable”。

然后,场景运行器中的以下内容完成了诀窍: using("table#inputTable tbody tr:eq(1) td:eq(2)").input("data[$parent.$index][$index]").enter(20);

Ari Lerner致敬,他帮我解决了这个问题。