webstub 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +1 -0
- data/README.md +118 -0
- data/lib/webstub/spec_helpers.rb +9 -0
- data/lib/webstub/version.rb +1 -1
- data/spec/spec_helpers_spec.rb +11 -0
- metadata +6 -4
- data/.rvmrc +0 -5
- data/lib/webstub/bacon.rb +0 -7
data/.gitignore
CHANGED
data/README.md
ADDED
@@ -0,0 +1,118 @@
|
|
1
|
+
WebStub [![Code Climate](https://codeclimate.com/badge.png)](https://codeclimate.com/github/mattgreen/webstub)
|
2
|
+
======
|
3
|
+
|
4
|
+
What if [WebMock](https://github.com/bblimke/webmock) and [NSURLProtocol](https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLProtocol_Class/Reference/Reference.html) had a baby?
|
5
|
+
|
6
|
+
Features
|
7
|
+
------------
|
8
|
+
* Supports most any HTTP library that is built on NSURLConnection
|
9
|
+
* Request matching based upon HTTP method, URI, and body
|
10
|
+
* Optionally, disable real network access
|
11
|
+
* Familiar, delicious syntax
|
12
|
+
* Bacon integration
|
13
|
+
|
14
|
+
Installation
|
15
|
+
------------
|
16
|
+
Please ensure you have the latest version of RubyMotion: (**WebStub requres version 1.24 or higher**)
|
17
|
+
|
18
|
+
$ sudo motion update
|
19
|
+
|
20
|
+
Also, if you haven't done so already, please [configure](http://thunderboltlabs.com/posts/using-bundler-with-rubymotion) your project to use Bundler.
|
21
|
+
|
22
|
+
Update your Gemfile:
|
23
|
+
|
24
|
+
gem "webstub", "~> 0.3.0"
|
25
|
+
|
26
|
+
Bundle:
|
27
|
+
|
28
|
+
$ bundle install
|
29
|
+
|
30
|
+
Usage
|
31
|
+
-----
|
32
|
+
* Add the following line to the top-most `describe` block in your spec:
|
33
|
+
|
34
|
+
`extend WebStub::SpecHelpers`
|
35
|
+
|
36
|
+
* Use the following methods to control the use of request stubbing:
|
37
|
+
- `disable_network_access!`
|
38
|
+
- `enable_network_access!`
|
39
|
+
- `stub_request`
|
40
|
+
- `reset_stubs`
|
41
|
+
|
42
|
+
Example Spec
|
43
|
+
------------
|
44
|
+
|
45
|
+
```ruby
|
46
|
+
describe "Example" do
|
47
|
+
extend WebStub::SpecHelpers
|
48
|
+
|
49
|
+
describe "Stubbing a GET request to return a simple response" do
|
50
|
+
it "retrieves the front page" do
|
51
|
+
stub_request(:get, "http://example.com/").
|
52
|
+
to_return(body: "Hello!", content_type: "text/plain")
|
53
|
+
|
54
|
+
@body = nil
|
55
|
+
@api.get_index do |body, error|
|
56
|
+
@body = body
|
57
|
+
resume
|
58
|
+
end
|
59
|
+
|
60
|
+
wait_max 1.0 do
|
61
|
+
@body.should.be == "Hello!"
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "Stubbing a GET request to return JSON" do
|
67
|
+
it "retrieves suggestions" do
|
68
|
+
stub_request(:get, "https://example.com/suggestions?q=mu").
|
69
|
+
to_return(json: { suggestions: ["muse"] })
|
70
|
+
|
71
|
+
@suggestions = nil
|
72
|
+
@api.get_suggestions("mu") do |results, error|
|
73
|
+
@suggestions = results
|
74
|
+
resume
|
75
|
+
end
|
76
|
+
|
77
|
+
wait_max 1.0 do
|
78
|
+
@suggestions.should.not.be.empty
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
describe "Stubbing a POST request to return JSON" do
|
84
|
+
it "handles a POST request" do
|
85
|
+
stub_request(:post, "https://example.com/action").
|
86
|
+
with(body: { q: "unsustainable" }).
|
87
|
+
to_return(json: [ { album: "The 2nd Law", release_date: "2012-10-01", artist: "Muse" } ])
|
88
|
+
|
89
|
+
@results = nil
|
90
|
+
@api.get_album_info_for_track("unsustainable") do |results, error|
|
91
|
+
@results = results
|
92
|
+
resume
|
93
|
+
end
|
94
|
+
|
95
|
+
wait_max 1.0 do
|
96
|
+
@results.should.not.be.empty
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
```
|
102
|
+
|
103
|
+
Conventions
|
104
|
+
-----------------
|
105
|
+
- The URL is matched *exactly* as is right now (hence query parameters need to be included and encoded)
|
106
|
+
- The `with` method's `body` option accepts either a Hash or a String:
|
107
|
+
- Hashes are assumed to be form data (with a `application/x-www-form-urlencoded` content type)
|
108
|
+
- Strings are matched as is
|
109
|
+
- The `to_return` method accepts a few options:
|
110
|
+
- `json`: accepts either a Hash or a String. If a Hash is provided, it will be converted to JSON. Strings are returned as is, with the Content-Type set to `application/json`.
|
111
|
+
- `body`: accepts a String, and returns it as-is
|
112
|
+
- `content_type`: sets the Content-Type when using the `body` parameter
|
113
|
+
|
114
|
+
TODO
|
115
|
+
---------
|
116
|
+
* Handle query params similarly to form data
|
117
|
+
* URI canonicalization
|
118
|
+
|
data/lib/webstub/version.rb
CHANGED
@@ -0,0 +1,11 @@
|
|
1
|
+
describe WebStub::SpecHelpers do
|
2
|
+
extend WebStub::SpecHelpers
|
3
|
+
|
4
|
+
it "includes WebStub::API" do
|
5
|
+
self.class.ancestors.should.include? WebStub::API
|
6
|
+
end
|
7
|
+
|
8
|
+
it "calls reset_stubs in an after block" do
|
9
|
+
self.instance_variable_get(:@after).should.not.be.empty
|
10
|
+
end
|
11
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webstub
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-22 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Easily stub out HTTP responses in RubyMotion specs
|
15
15
|
email:
|
@@ -19,19 +19,19 @@ extensions: []
|
|
19
19
|
extra_rdoc_files: []
|
20
20
|
files:
|
21
21
|
- .gitignore
|
22
|
-
- .rvmrc
|
23
22
|
- Gemfile
|
24
23
|
- Gemfile.lock
|
25
24
|
- Guardfile
|
26
25
|
- LICENSE
|
26
|
+
- README.md
|
27
27
|
- Rakefile
|
28
28
|
- lib/spec/spec_delegate.rb
|
29
29
|
- lib/webstub.rb
|
30
30
|
- lib/webstub/api.rb
|
31
|
-
- lib/webstub/bacon.rb
|
32
31
|
- lib/webstub/json.rb
|
33
32
|
- lib/webstub/protocol.rb
|
34
33
|
- lib/webstub/registry.rb
|
34
|
+
- lib/webstub/spec_helpers.rb
|
35
35
|
- lib/webstub/stub.rb
|
36
36
|
- lib/webstub/uri.rb
|
37
37
|
- lib/webstub/version.rb
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- spec/json_spec.rb
|
41
41
|
- spec/protocol_spec.rb
|
42
42
|
- spec/registry_spec.rb
|
43
|
+
- spec/spec_helpers_spec.rb
|
43
44
|
- spec/stub_spec.rb
|
44
45
|
- spec/uri_spec.rb
|
45
46
|
- webstub.gemspec
|
@@ -73,6 +74,7 @@ test_files:
|
|
73
74
|
- spec/json_spec.rb
|
74
75
|
- spec/protocol_spec.rb
|
75
76
|
- spec/registry_spec.rb
|
77
|
+
- spec/spec_helpers_spec.rb
|
76
78
|
- spec/stub_spec.rb
|
77
79
|
- spec/uri_spec.rb
|
78
80
|
has_rdoc:
|
data/.rvmrc
DELETED