Ng点击-如何进行行为单元测试

Ng-click - how to unit test for behaviour

本文关键字:单元测试 何进行 点击 Ng      更新时间:2023-09-26

当一个角度指令的模板中有一个带有ng-click属性的按钮时,我应该测试实际操作(点击)的效果,还是测试附加到ng-clic属性的函数调用的效果?

换句话说,对于一个指令,它有一个这样的模板:

<div>
    <button ng-click="game.start()">start</button>
</div>

我应该测试点击功能还是game.start功能?

我知道稍后可以将函数game.start更改为其他函数。此外,ng点击可以被删除,点击事件可以用不同的方式捕捉。

使用triggerHandler("click")进行单元测试很诱人,但指令的模板也可能发生变化。这意味着我需要对DOM节点进行一些"经过验证"的访问,即通过id属性。

我应该仅仅为了单元测试而在节点上附加id属性,还是应该采取不同的方法来解决这个问题?

在指令的情况下,我通常会通过dom来单击元素。在您的情况下,这里:

it("performs some action when clicked", function() {
    element.find("button").click();
    assert(something);
});

即使忘记添加ng-click指令,直接调用处理程序也会使测试通过,这不是我通常想要的。它还让您可以自由地重命名处理程序方法,而无需调整测试,从而使其不那么脆弱。

如果模板变得非常复杂,并且您只是为了测试而添加id,那么您可能需要考虑将指令分解为多个指令。