Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ganmacs/grpc_mock
Library for stubbing gRPC requests in Ruby.
https://github.com/ganmacs/grpc_mock
grpc grpc-ruby ruby stubbing-requests
Last synced: 4 days ago
JSON representation
Library for stubbing gRPC requests in Ruby.
- Host: GitHub
- URL: https://github.com/ganmacs/grpc_mock
- Owner: ganmacs
- License: mit
- Created: 2018-07-06T10:01:30.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2024-05-18T01:04:55.000Z (9 months ago)
- Last Synced: 2024-10-14T02:12:22.867Z (4 months ago)
- Topics: grpc, grpc-ruby, ruby, stubbing-requests
- Language: Ruby
- Homepage:
- Size: 85 KB
- Stars: 45
- Watchers: 3
- Forks: 19
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
# GrpcMock [![Build Status](https://github.com/ganmacs/grpc_mock/actions/workflows/ci.yml/badge.svg)](https://github.com/ganmacs/grpc_mock/actions/workflows/ci.yml)
Library for stubbing grpc in Ruby.
## Installation
Add this line to your application's Gemfile:
```ruby
gem 'grpc_mock'
```And then execute:
$ bundle
Or install it yourself as:
$ gem install grpc_mock
## Usage
If you use [RSpec](https://github.com/rspec/rspec), add the following code to spec/spec_helper.rb:
```ruby
require 'grpc_mock/rspec'
```## Examples
See definition of protocol buffers and gRPC generated code in [spec/examples/hello](https://github.com/ganmacs/grpc_mock/tree/master/spec/examples/hello)
### Stubbed request based on path and with the default response
```ruby
GrpcMock.stub_request("/hello.hello/Hello").to_return(Hello::HelloResponse.new(msg: 'test'))client = Hello::Hello::Stub.new('localhost:8000', :this_channel_is_insecure)
client.hello(Hello::HelloRequest.new(msg: 'hi')) # => Hello::HelloResponse.new(msg: 'test')
```### Stubbing requests based on path and request
```ruby
GrpcMock.stub_request("/hello.hello/Hello").with(Hello::HelloRequest.new(msg: 'hi')).to_return(Hello::HelloResponse.new(msg: 'test'))client = Hello::Hello::Stub.new('localhost:8000', :this_channel_is_insecure)
client.hello(Hello::HelloRequest.new(msg: 'hello')) # => send a request to server
client client.hello(Hello::HelloRequest.new(msg: 'hi')) # => Hello::HelloResponse.new(msg: 'test') (without any requests to server)
```### Responding dynamically to the stubbed requests
```ruby
GrpcMock.stub_request("/hello.hello/Hello").to_return do |req, call|
Hello::HelloResponse.new(msg: "#{req.msg} too")
endclient = Hello::Hello::Stub.new('localhost:8000', :this_channel_is_insecure)
client.hello(Hello::HelloRequest.new(msg: 'hi')) # => Hello::HelloResponse.new(msg: 'hi too')
```### Real requests to network can be allowed or disabled
```ruby
client = Hello::Hello::Stub.new('localhost:8000', :this_channel_is_insecure)GrpcMock.disable_net_connect!
client.hello(Hello::HelloRequest.new(msg: 'hello')) # => Raise NetConnectNotAllowedError errorGrpcMock.allow_net_connect!
Hello::Hello::Stub.new('localhost:8000', :this_channel_is_insecure) # => send a request to server
```### Raising errors
**Exception declared by class**
```ruby
GrpcMock.stub_request("/hello.hello/Hello").to_raise(StandardError)client = Hello::Hello::Stub.new('localhost:8000', :this_channel_is_insecure)
client.hello(Hello::HelloRequest.new(msg: 'hi')) # => Raise StandardError
```**or by exception instance**
```ruby
GrpcMock.stub_request("/hello.hello/Hello").to_raise(StandardError.new("Some error"))
```**or by string**
```ruby
GrpcMock.stub_request("/hello.hello/Hello").to_raise("Some error")
```## Contributing
Bug reports and pull requests are welcome on GitHub at https://github.com/ganmacs/grpc_mock. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.
## License
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).