em-rspec 0.1 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. data/README.md +37 -0
  2. data/lib/patch.rb +3 -1
  3. metadata +34 -43
data/README.md CHANGED
@@ -0,0 +1,37 @@
1
+ # em-rspec
2
+
3
+ em-rspec is a very simple patch to RSpec 2 that sets up and tears down an EventMachine reactor loop, and runs each example within the context of the loop.
4
+ It also will wrap each example in a [Fiber](http://ruby-doc.org/core-1.9/classes/Fiber.html) so you are free to untangle nested callbacks.
5
+
6
+ # Usage
7
+
8
+ `gem install em-rspec`
9
+
10
+ `require 'em-rspec'`
11
+
12
+ em-rspec extends RSpec in an unobtrusive way that requires no addtional code in your specs to test EM code. e.g.
13
+
14
+ <pre>describe 'em-rspec' do
15
+ it 'executes specs within a reactor loop' do
16
+ EM.reactor_running?.should be_true # This is true
17
+ end
18
+ end</pre>
19
+
20
+ # How it works
21
+
22
+ As mentioned before, before the spec is run, a reactor loop is setup, and a callback to teardown the loop when your example finishes execution is created.
23
+ This is an important point to consider because if you do any asynchronous i/o operations, your code will not be tested, because your code will likely have
24
+ finished execution before the i/o operation is complete. It is an antipattern to actually hit the network in your tests and what you should do is mock out
25
+ i/o calls to return immediately, e.g. http calls with [webmock](https://github.com/bblimke/webmock).
26
+
27
+ This is how your examples are run with em-rspec:
28
+
29
+ - Set up reactor loop
30
+ - Set callback to tear down reactor loop when spec is finished
31
+ - Wrap example in fiber
32
+ - Run before each block
33
+ - Run example
34
+ - Run after each block
35
+ - Tear down reactor loop
36
+
37
+ &copy; 2011 Stevie Graham
@@ -12,8 +12,10 @@ RSpec::Core::Example.class_eval do
12
12
  def run(example_group_instance, reporter)
13
13
  Fiber.new do
14
14
  EM.run do
15
- EM.next_tick { EM.stop }
15
+ df = EM::DefaultDeferrable.new
16
+ df.callback { |x| EM.stop }
16
17
  ignorant_run example_group_instance, reporter
18
+ df.succeed
17
19
  end
18
20
  end.resume
19
21
  end
metadata CHANGED
@@ -1,79 +1,70 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: em-rspec
3
- version: !ruby/object:Gem::Version
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
4
5
  prerelease:
5
- version: "0.1"
6
6
  platform: ruby
7
- authors:
7
+ authors:
8
8
  - Stevie Graham
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
-
13
- date: 2011-07-25 00:00:00 +01:00
14
- default_executable:
15
- dependencies:
16
- - !ruby/object:Gem::Dependency
12
+ date: 2012-07-13 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
17
15
  name: eventmachine
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: &70187642950260 !ruby/object:Gem::Requirement
20
17
  none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
24
21
  version: 0.12.10
25
22
  type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: rspec
29
23
  prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ version_requirements: *70187642950260
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &70187642949580 !ruby/object:Gem::Requirement
31
28
  none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
35
32
  version: 2.5.0
36
33
  type: :development
37
- version_requirements: *id002
38
- description: "Test EventMachine code in RSpec 2 "
34
+ prerelease: false
35
+ version_requirements: *70187642949580
36
+ description: ! 'Test EventMachine code in RSpec 2 '
39
37
  email: sjtgraham@mac.com
40
38
  executables: []
41
-
42
39
  extensions: []
43
-
44
40
  extra_rdoc_files: []
45
-
46
- files:
41
+ files:
47
42
  - README.md
48
43
  - lib/em-rspec.rb
49
44
  - lib/patch.rb
50
- has_rdoc: true
51
45
  homepage: http://github.com/stevegraham/em-rspec
52
46
  licenses: []
53
-
54
47
  post_install_message:
55
48
  rdoc_options: []
56
-
57
- require_paths:
49
+ require_paths:
58
50
  - lib
59
- required_ruby_version: !ruby/object:Gem::Requirement
51
+ required_ruby_version: !ruby/object:Gem::Requirement
60
52
  none: false
61
- requirements:
62
- - - ">="
63
- - !ruby/object:Gem::Version
53
+ requirements:
54
+ - - ! '>='
55
+ - !ruby/object:Gem::Version
64
56
  version: 1.9.1
65
- required_rubygems_version: !ruby/object:Gem::Requirement
57
+ required_rubygems_version: !ruby/object:Gem::Requirement
66
58
  none: false
67
- requirements:
68
- - - ">="
69
- - !ruby/object:Gem::Version
70
- version: "0"
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
71
63
  requirements: []
72
-
73
64
  rubyforge_project:
74
- rubygems_version: 1.5.2
65
+ rubygems_version: 1.8.16
75
66
  signing_key:
76
67
  specification_version: 3
77
68
  summary: Test EventMachine code in RSpec 2
78
69
  test_files: []
79
-
70
+ has_rdoc: