2014-09-20 31 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