通量商店 - 单元测试

Posted

技术标签:

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

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

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

storeObj = 
...


_secretsetterfunction = function ()

module.exports storeObj

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

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

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

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

TL;DR - 使用rewire

【讨论】:

【参考方案2】:

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

【讨论】:

我明白了,它确实有效。但它很快就会变得相当复杂,尤其是使用 waitFor() 命令。 不是真的,其实很简单。您将所有测试设置为超时,调用一个操作,然后您只需等待存储上的更改事件并验证有效负载。没有更简单的方法可以做到这一点。我确实推荐摩卡而不是茉莉花……它对这种事情 afaik 有更好的支持。 我不认为 React 存储之间的依赖关系是一个好主意。使用 CQRS/EventSourcing 原则可以帮助大型团队更好地进行可测试性和扩展。另见***.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

【讨论】:

以上是关于通量商店 - 单元测试的主要内容,如果未能解决你的问题,请参考以下文章

Windows 应用商店应用单元测试 USB 设备

助焊剂储存 - 单元测试

PHP单元,使用单元测试测试laravel日志消息

测试Selenium录制单元测试脚本

调度程序没有在开玩笑的单元测试中注册回调

Objective-C 单元测试资源是不是会增加整体文件大小