2014-09-20 64 views
2

我正在为几家Flux商店编写单元测试,并且遇到了一些麻烦。助焊剂商店 - 单元测试

我的店一般都建这样的:

storeObj = { 
... 
} 

_secretsetterfunction = function(){} 

module.exports storeObj 

正如你所看到的,因为二传功能是存储对象之外 - 这是不能直接访问。

这提出了一个问题,因为测试/操作存储数据的唯一方法是通过Action - > Dispatcher - >事件侦听器(Action可以在技术上被删除),这不是我想要的在单元测试商店时要经过。

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

有什么想法?

回答

2

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

+0

我得到的,并它确实工作。 但它可以很快变得相当复杂,尤其是使用waitFor()命令。 – 2014-09-21 07:53:58

+0

不是,它其实很简单。您将所有测试设置为超时,调用某个操作,然后等待存储上的更改事件并验证有效内容。没有简单的方法来做到这一点。我建议摩卡茉莉花比它更好地支持这种事afaik。 – FakeRainBrigand 2014-09-21 08:05:29

+0

我不认为React商店之间的依赖关系是一个好主意。使用CQRS/EventSourcing原则可以帮助大型团队提高可测试性和扩展性。另请参阅http://stackoverflow.com/a/25806145/82609 – 2014-09-22 12:52:34

4

我有这个问题太,使用茉莉花。

我写了一篇关于如何让那些私人的内部函数的引用的博客文章&例如回购,当你不使用玩笑:http://bensmithett.com/testing-flux-stores-without-jest/

TL; DR - 使用rewire

+0

谢谢虽然我们结束了去Jest的方式 – 2015-03-01 12:24:15

+0

@ben,写得很好。这一切都变得非常清楚! – cnp 2015-03-17 03:20:33