我有一个角度应用程序,它在控制器中定义了一个表,如下所示:
$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 应用于数据对象中的每一行。这与模板连接如下:
<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() - 这也不起作用。