【问题标题】:flux store - unit tests通量商店 - 单元测试
【发布时间】:2014-11-15 04:37:03
【问题描述】:

我正在为几个 Flux 商店编写单元测试,遇到了一个小麻烦。

我的店铺一般是这样建的:

storeObj = {
...
}

_secretsetterfunction = function (){}

module.exports storeObj

如您所见,由于 setter 函数在 store 对象之外 - 它不能直接访问。

这带来了一个问题,因为测试/操作商店数据的唯一方法是通过 Action -> Dispatcher -> 事件监听器(从技术上讲,动作可以被删除)这不是我在对商店进行单元测试时想要经历的事情。

另一种方法是将 setter 方法实际放在 store 对象上 - 但这不是我真正想做的事情。

有什么想法吗?

【问题讨论】:

    标签: jasmine reactjs reactjs-flux


    【解决方案1】:

    我也有这个问题,使用 Jasmine。

    我写了一篇博文和示例 repo,介绍了在不使用 Jest 时如何获取对这些私有内部函数的引用:http://bensmithett.com/testing-flux-stores-without-jest/

    TL;DR - 使用rewire

    【讨论】:

      【解决方案2】:

      操作实际上是商店的公共 api。您只需验证操作的效果即可全面测试您的商店。

      【讨论】:

      • 我明白了,它确实有效。但它很快就会变得相当复杂,尤其是使用 waitFor() 命令。
      • 不是真的,其实很简单。您将所有测试设置为超时,调用一个操作,然后您只需等待存储上的更改事件并验证有效负载。没有更简单的方法可以做到这一点。我确实推荐摩卡而不是茉莉花……它对这种事情 afaik 有更好的支持。
      • 我不认为 React 存储之间的依赖关系是一个好主意。使用 CQRS/EventSourcing 原则可以帮助大型团队更好地进行可测试性和扩展。另见stackoverflow.com/a/25806145/82609
      • @SebastienLorber 这很有趣,但目前可能远远满足我们的需求。
      • @FakeRainBrigand 同意,这就是我们目前正在做的事情,但感觉我正在做更多的额外工作来测试这些 - 但我想这是最好的解决方案 atm
      【解决方案3】:

      因此,flux 团队刚刚在一篇博文中解决了这个问题,尽管他们使用的是自己的变体,称为 Jest。仍然值得一读:

      http://facebook.github.io/react/blog/2014/09/24/testing-flux-applications.html?utm_source=javascriptweekly&utm_medium=email

      【讨论】:

        猜你喜欢
        • 2019-09-06
        • 2015-07-08
        • 2020-06-18
        • 2016-01-19
        • 1970-01-01
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 2016-04-17
        相关资源
        最近更新 更多