【问题标题】:in angular web application what needs to be unit tested?在 Angular Web 应用程序中需要对哪些内容进行单元测试?
【发布时间】:2013-10-17 20:56:54
【问题描述】:

对于编写 Angular 代码的前端开发人员,我应该对 javascript 前端项目的哪个部分进行单元测试?我发现不需要测试很多代码,我最大的问题是需要测试 Angular 服务的哪一部分?如果 $httpBackend 是一个模拟调用,那么调用它有什么意义?

【问题讨论】:

    标签: unit-testing angularjs service


    【解决方案1】:

    随着您的项目变得越来越复杂,您可能会发现您的 Angular 应用程序正在做很多事情。 Angular 的设计允许客户端承担很多处理和渲染来自服务器的数据的责任。

    是的,我同意,除了您自己的代码之外,您不应该测试任何东西。因此,为$http 编写测试是没有用的。但是,如果您希望服务器返回特定的 JSON 合约,并且您希望确保将其正确映射到您将在 Angular 应用程序中使用的结构,则值得测试。此外,如果您在服务或控制器中进行计算,则该逻辑值得测试。

    Angular 本身被设置为支持 TDD,因为它在视图、控制器和服务之间很好地分离了关注点(甚至可以编译和测试指令)。您编写的所有 javascript 代码都是测试覆盖率的良好候选者。所以,恕我直言,您应该对指令、控制器和服务进行单元测试。你可以得到尽可能详细的信息,以确保你的代码是可靠的。

    【讨论】:

    • 感谢您澄清这一点,所以几乎任何时候我编写代码并且我可以对所有未确定的内容使用模拟,测试将确保逻辑流程正确。因此,填空将产生相同的结果。现在还有两个问题,如果你能回答,我有非常复杂的指令,我的意思是非常复杂的指令,最好的方法是将逻辑分离成单独的函数来测试,还是我应该对中的每个函数进行测试指令? 2,我经常发现我的测试比代码本身长 3 倍,这正常吗?
    • 对于问题 1,我有一个通用验证指令,它几乎可以验证长度/模式/值/以及这三个方面的许多其他方面,并使我的生活编写表单验证更容易,它们执行复杂的验证,例如当您尝试输入卡号等时,将信用卡表单的卡类型消息转换为“请先选择卡类型”等。在这种情况下编写单元测试的最佳方法是什么?
    • 这两个问题可能是关于 SO 的新帖子。我不确定我可以完全回答他们,但我相信其他一些人可以。对于 q1:通常,我一次只关注一个功能的一个方面。因此,您将有许多对函数进行三角测量并执行其所有流程的测试。但作为一般规则,尝试一次只测试一件事。对于 q2:这实际上取决于您要测试的内容。但是,我会说,通常测试会更长一些,因为它们需要设置和断言。
    • 至于表单验证,我也不确定。仍然通过验证找到我的方式。也许是 e2e 测试?这取决于您的验证在多大程度上依赖于 DOM。
    猜你喜欢
    • 1970-01-01
    • 2016-06-26
    • 2012-03-30
    • 2016-04-05
    • 2019-09-10
    • 1970-01-01
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多