Class: React::Test::Session

Inherits:
Object show all
Defined in:
lib/react/test/session.rb

Constant Summary collapse

DSL_METHODS =
%i[mount instance native element update_params
force_update! html].freeze

Instance Method Summary collapse

Instance Method Details

#elementObject



24
25
26
# File 'lib/react/test/session.rb', line 24

def element
  @element
end

#force_update!Object



35
36
37
# File 'lib/react/test/session.rb', line 35

def force_update!
  native.force_update!
end

#htmlObject



39
40
41
42
43
# File 'lib/react/test/session.rb', line 39

def html
  # How can we get the current ReactElement w/o violating private APIs?
  elem = Native(native[:_reactInternalInstance][:_currentElement])
  React.render_to_static_markup(elem)
end

#instanceObject



12
13
14
15
16
17
18
# File 'lib/react/test/session.rb', line 12

def instance
  unless @instance
    @native = Native(`React.addons.TestUtils.renderIntoDocument(#{element.to_n})`)
    @instance = `#{@native.to_n}._getOpalInstance()`
  end
  @instance
end

#mount(component_klass, params = {}) ⇒ Object



7
8
9
10
# File 'lib/react/test/session.rb', line 7

def mount(component_klass, params = {})
  @element = React.create_element(component_klass, params)
  instance
end

#nativeObject



20
21
22
# File 'lib/react/test/session.rb', line 20

def native
  @native
end

#update_params(params) ⇒ Object



28
29
30
31
32
33
# File 'lib/react/test/session.rb', line 28

def update_params(params)
  cloned_element = React::Element.new(`React.cloneElement(#{self.element.to_n}, #{params.to_n})`)
  prev_container = `#{self.instance.dom_node}.parentNode`
  React.render(cloned_element, prev_container)
  nil
end