return function () local CorePackages = game:GetService("CorePackages") local Roact = require(CorePackages.Roact) local ExternalEventConnection = require(script.Parent.ExternalEventConnection) it("if mounted, should call the callback when the event is triggered", function() local event = Instance.new("BindableEvent") local count = 0 local element = Roact.createElement(ExternalEventConnection, { event = event.Event, callback = function() count = count + 1 end, }) local RoactInstance = Roact.mount(element) event:Fire() expect(count).to.equal(1) Roact.unmount(RoactInstance) event:Fire() expect(count).to.equal(1) event:Destroy() end) it("should handle updating the callback or event", function() local firstEvent = Instance.new("BindableEvent") local secondEvent = Instance.new("BindableEvent") local count = 0 local changeState local EventContainer = Roact.Component:extend("EventContainer") function EventContainer:init() self.state = { event = firstEvent.Event, callback = function() count = count + 1 end, } end function EventContainer:render() return Roact.createElement(ExternalEventConnection, { event = self.state.event, callback = self.state.callback, }) end function EventContainer:didMount() changeState = function(newState) self:setState(newState) end end function EventContainer:willUnmount() changeState = nil end Roact.mount(Roact.createElement(EventContainer)) firstEvent:Fire() expect(count).to.equal(1) changeState({ event = secondEvent.Event, }) firstEvent:Fire() expect(count).to.equal(1) secondEvent:Fire() expect(count).to.equal(2) changeState({ callback = function() -- this is intentionally blank end, }) secondEvent:Fire() expect(count).to.equal(2) firstEvent:Destroy() secondEvent:Destroy() end) end