[英]Dispatcher not registering callbacks in jest unit tests
I'm writing unit tests for a store in a react+flux app. 我正在为react + flux app中的商店编写单元测试。 I followed the example of setting up the mock dispatcher here , and my unit test looks like this: 我按照这里设置模拟调度程序的示例,我的单元测试如下所示:
jest.dontMock "../../app/scripts/stores/item_store.coffee"
jest.dontMock "object-assign"
describe 'ItemStore', ->
ShopConstants = require "../../app/scripts/constants/shop_constants.coffee"
ShopDispatcher = undefined
ItemStore = undefined
callback = undefined
actionBuildQueryString =
source: "VIEW_ACTION"
action:
type: ShopConstants.ActionTypes.BUILD_QUERY_STRING
size: "4"
actionReceiveFilterRespData =
source: "SERVER_ACTION"
action:
type: ShopConstants.ActionTypes.RECEIVE_FILTER_RESP_DATA
data: {item: {} }
beforeEach ->
ShopConstants = require "../../app/scripts/constants/shop_constants.coffee"
ShopDispatcher = require "../../app/scripts/dispatchers/shop_dispatcher.coffee"
ItemStore = require "../../app/scripts/stores/item_store.coffee"
callback = ShopDispatcher.register.mock.calls[0][0]
it "registers a callback with the dispatcher", ->
expect(ShopDispatcher.register.mock.calls.length).toBe(1)
In my item_store.coffee file, I register with the dispatcher as so: 在我的item_store.coffee文件中,我向调度程序注册如下:
ShopDispatcher.register (payload) ->
action = payload.action
switch action.type
when ActionTypes.BUILD_QUERY_STRING
WebApiUtils.fetchItems(payload)
when ActionTypes.RECEIVE_FILTER_RESP_DATA
_setItems(action.data)
ItemStore.emitChange()
I expected the mocked Dispatcher to register the callbacks since that happens in the actual item_store file, which I have told jest to not mock. 我期望模拟的Dispatcher注册回调,因为这发生在实际的item_store文件中,我告诉他不要模拟。 However, since ShopDispatcher.register is undefined, it's not being registered, but I am not quite sure why. 但是,由于ShopDispatcher.register未定义,因此未注册,但我不确定原因。 Any help is appreciated. 任何帮助表示赞赏。
I was also facing the same problem. 我也面临同样的问题。 Instead of using the ShopDispatcher.register.mock.calls[0][0]
try the ShopDispatcher.dispatch
. 而不是使用ShopDispatcher.register.mock.calls[0][0]
尝试ShopDispatcher.dispatch
。 the below code working perfectly for me (using type script). 下面的代码对我来说非常合适(使用类型脚本)。
beforeEach(function () {
dispatcher = require("../../../src/App/Dispatcher");
localeStore = require("../../../src/stores/localestore");
localeAction = require("../../../src/actions/Locale/LocaleAction");
}
it("should translate the element with the value in current locale JSON", function () {
localeChangeAction = new localeAction(true, locale, localeJson);
dispatcher.dispatch(localeChangeAction);
var translatedText = localeStore.instance.TranslateText("login.login-header");
expect(translatedText).toEqual("Login header");
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.