【问题标题】:How to transition to a ui-router state in unit tests?如何在单元测试中转换到 ui-router 状态?
【发布时间】:2014-03-04 15:49:22
【问题描述】:

我正在使用带有 AngularJS 的 ui-router。

我有一个名为 root 的父状态,其 URL / 链接到 RootCtrl 控制器。 root 状态有 2 个孩子,分别命名为 root.aboutroot.contact,它们分别位于 URL root.aboutroot.contact。我正在尝试转换到子状态并断言其控制器在我的 jasmine 测试中设置了范围属性,但我无法使测试通过。

这是demo on Plunker。该演示有 2 个失败的测试,我怎样才能让它们通过?

【问题讨论】:

    标签: angularjs unit-testing angular-ui angular-ui-router


    【解决方案1】:

    您不能为您的测试共享范围变量,它们由每个控制器的角度框架以不同方式实例化。是的,它们由子状态继承,但实例化方式不同

    我制作了一个适用于您的情况的新 plunkr:

    http://plnkr.co/edit/RaZ34s?p=preview

    【讨论】:

    • 看起来state.go 在那里没有做任何事情。注释掉这些行不会使测试失败。我期待state.go 转换到该状态并执行不会发生的控制器代码。有什么想法吗?
    • Here's a Plunker 表明我的意思。我希望测试能够通过,因为我希望状态转换能够重新实例化控制器。
    • 我认为你是对的。我们在那里测试的是控制器的初始化代码,这就是它通过的原因。在 ui-router 中,控制器是由路由框架实例化的,所以我认为您不应该在这里测试控制器的范围。那应该是在不同的茉莉花测试中。您需要测试的是该州的 URL。请参阅此示例:stackoverflow.com/questions/20433485/…stackoverflow.com/questions/19282006/…
    • 感谢分享链接。仍然不清楚为什么 ui-router 在测试中的状态转换期间不实例化控制器。我已经发布了一个关于此的新问题:stackoverflow.com/questions/22216310/…
    猜你喜欢
    • 2015-10-27
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    相关资源
    最近更新 更多