rspec_candy 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,4 +1,132 @@
1
- Changes from previous versions:
1
+ #rspec_candy
2
+
3
+
4
+ A collection of nifty helpers for your rspec suite.
5
+
6
+ Will work for RSpec1 and Rails 2, or RSpec2 and Rails 3, or no Rails at all..
7
+
8
+
9
+ ##Usage
10
+
11
+ Add `rspec_candy` to your Gemfile.
12
+ Add `require 'rspec_candy/helpers'` to your spec_helper.rb, after the rspec requires.
13
+
14
+
15
+ ##Helpers provided
16
+
17
+
18
+ ### Extensions to **Object**
19
+
20
+ **should_receive_and_execute**
21
+
22
+ Like "should_receive", but also executes the method.
23
+
24
+
25
+ **should_receive_and_return**
26
+
27
+ Expects multiple returns at once:
28
+
29
+ dog.should_receive_and_return(:bark => "Woof", :fetch => "stick")
30
+
31
+
32
+ **should_receive_chain**
33
+
34
+ Expect a chain of method calls:
35
+
36
+ dog.should_receive_chain(:bark, :upcase).and_return("WOOF")
37
+
38
+
39
+ You can also expect arguments, like:
40
+
41
+ dog.should_receive_chain([:bark, 'loudly'], :upcase).and_return("WOOF!!!")
42
+
43
+
44
+ **stub_existing**
45
+
46
+ Like stub, put complains if the method did not exist in the first place.
47
+
48
+
49
+ ### Extensions to **Class**
50
+
51
+ **disposable_copy**
52
+
53
+ Like dup for classes. This will temporarily add a method to a class:
54
+
55
+ copy = Model.disposable_copy.class_eval do
56
+ def foo; end
57
+ end
58
+
59
+ object = copy.new
60
+
61
+
62
+ **new_with_stubs**
63
+
64
+ Instantiates and stubs in one call:
65
+
66
+ Model.new_with_stubs(:to_param => '1')
67
+
68
+ **stub_any_instance**
69
+
70
+ Backport for `any_instance.stub` to RSpec1.
71
+
72
+
73
+ ### Extensions to **example groups**
74
+
75
+ **it_should_act_like**
76
+
77
+ Extension to 'it_should_behave_like`, not necessary for RSpec2.
78
+
79
+ Allows parametrizing shared examples, exposes parameters as lets:
80
+
81
+ shared_examples_for "an animal" do
82
+ it 'should make noises' do
83
+ subject.say.should == expected_noise
84
+ end
85
+ end
86
+
87
+ describe Dog do
88
+ it_should_act_like 'an animal', :expected_noise => 'Woof!'
89
+ end
90
+
91
+
92
+ Blocks are passed as a let named "block".
93
+
94
+
95
+ **it_should_run_callbacks**
96
+
97
+ Only on Rails.
98
+
99
+ Check if callbacks are run. Note the name of the describe block is significant:
100
+
101
+ describe Model, '#after_save' do
102
+ it_should_run_callbacks :notify_this, :notify_that
103
+ end
104
+
105
+ If you use the state_machine gem, you can also spec callbacks for state_machine transitions:
106
+
107
+
108
+ describe Model, '#my_event from :my_state1 to :my_state" do
109
+ it_should_run_callbacks :notify_this, :notify_that
110
+ end
111
+
112
+ **it_should_run_callbacks_in_order**
113
+
114
+ Like `it_should_run_callbacks`, but also checks the correct order.
115
+
116
+
117
+
118
+
119
+ ### Extensions to **ActiveRecord::Base**
120
+
121
+ **create_without_callbacks**
122
+
123
+ Only on Rails.
124
+
125
+ Creates a record without validations or callbacks (like a stub in the database). Can be significantly faster than a factory.
126
+
127
+
128
+
129
+ ##Changes from previous versions:
2
130
 
3
131
  - `new_and_store` has been renamed `create_without_callbacks`
4
132
  - `keep_invalid!` has been renamed to `prevent_storage`
@@ -4,8 +4,9 @@ module RSpecCandy
4
4
 
5
5
  def disposable_copy(&body)
6
6
  this = self
7
- copy = Class.new(self, &body)
7
+ copy = Class.new(self)
8
8
  copy.singleton_class.send(:define_method, :name) { this.name }
9
+ copy.class_eval(&body) if body
9
10
  copy
10
11
  end
11
12
 
@@ -1,3 +1,3 @@
1
1
  module RSpecCandy
2
- VERSION = '0.1.1'
2
+ VERSION = '0.1.2'
3
3
  end
@@ -8,7 +8,7 @@ require "#{File.dirname(__FILE__)}/app_root/config/environment"
8
8
  require 'spec/rails'
9
9
 
10
10
  # Load dependencies
11
- require 'rspec_candy'
11
+ require 'rspec_candy/helpers'
12
12
 
13
13
  # Require support code
14
14
  Dir["../shared/support/**/*.rb"].each {|f| require f}
@@ -9,7 +9,7 @@ require "#{File.dirname(__FILE__)}/app_root/config/environment"
9
9
  require 'rspec/rails'
10
10
 
11
11
  # Load dependencies
12
- require 'rspec_candy'
12
+ require 'rspec_candy/helpers'
13
13
 
14
14
  # Require support code
15
15
  Dir["../shared/support/**/*.rb"].each {|f| require f}
@@ -38,6 +38,14 @@ describe RSpecCandy::Helpers::DisposableCopy do
38
38
  Model.new.should_not respond_to(:foo)
39
39
  end
40
40
 
41
+ it 'should evaluate the block after the copy has been renamed to the original class name' do
42
+ spy = mock('spy')
43
+ spy.should_receive(:observe_name).with('Model')
44
+ Model.disposable_copy do
45
+ spy.observe_name(name)
46
+ end
47
+ end
48
+
41
49
  end
42
50
 
43
51
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rspec_candy
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Henning Koch
@@ -16,7 +16,8 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2012-05-11 00:00:00 Z
19
+ date: 2012-07-05 00:00:00 +02:00
20
+ default_executable:
20
21
  dependencies:
21
22
  - !ruby/object:Gem::Dependency
22
23
  name: rspec
@@ -122,6 +123,7 @@ files:
122
123
  - spec/shared/support/matchers/pass_as_example.rb
123
124
  - template/spec_candy.rails2.rb
124
125
  - template/spec_candy.rails3.rb
126
+ has_rdoc: true
125
127
  homepage: https://github.com/makandra/rspec_candy
126
128
  licenses: []
127
129
 
@@ -151,10 +153,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
153
  requirements: []
152
154
 
153
155
  rubyforge_project:
154
- rubygems_version: 1.8.10
156
+ rubygems_version: 1.3.9.4
155
157
  signing_key:
156
158
  specification_version: 3
157
159
  summary: RSpec helpers and matchers we use in our daily work at makandra.
158
160
  test_files: []
159
161
 
160
- has_rdoc: