Module: Opal::Connect::ConnectPlugins::ConnectRSpec::ConnectClassMethods

Defined in:
lib/opal/connect/plugins/rspec.rb

Instance Method Summary collapse

Instance Method Details

#run_rspecObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/opal/connect/plugins/rspec.rb', line 9

def run_rspec
  read, write = IO.pipe

  pid = fork do
    read.close

    rspec_requires = []
    options        = Opal::Connect.options[:rspec]

    Opal.append_path "./#{options[:folder]}"
    $:.unshift "./#{options[:folder]}"

    require 'rspec'
    require 'opal-rspec'

    Dir.glob("./#{options[:folder]}/**/*_spec.rb").each do |file|
      rspec_requires << "require '#{file.sub('./', '')}'"
    end

    Opal::Connect.write_file :rspec, %{
      require 'opal/connect/puts'
      require 'opal/rspec'
    }, "#{::RSpec::Version::STRING}#{Opal::RSpec::VERSION}"

    File.write "#{Dir.pwd}/.connect/rspec_tests.js", build(%{
      #{rspec_requires.join(';')}
      RSpec::Core::Runner.autorun
    })

    Dir["#{options[:folder]}/**/*_spec.rb"].each { |file| load file }
    Opal::Connect.setup
    Opal::Connect.write_entry_file(self)

    string = html! {
      html do
        head { meta charset: 'utf-8' }
        body Class.new {
          include Opal::Connect
        }.instance_exec(&options[:code])
      end
    }

    Marshal.dump(string, write)
    exit!(0) # skips exit handlers.
  end

  write.close
  result = read.read
  Process.wait(pid)
  raise "child failed" if result.empty?
  Marshal.load(result)
end