Comments (4)
When the external request is not the thing you are testing, you may be interested in using the stub/4 function. It was added specifically for this case.
Added here #58
Bypass.stub(bypass, "POST", "/1.1/statuses/update.json", fn conn ->
Agent.get_and_update(AgentModule, fn step_no -> {step_no, step_no + 1} end)
Plug.Conn.resp(conn, 429, ~s<{"errors": [{"code": 88, "message": "Rate limit exceeded"}]}>)
end)
from bypass.
This would be great! I have this problem when testing async work triggered by AMQP messages. My current workaround for this goes like:
test "something" do
test = self()
Bypass.expect(bypass, "POST", "/endpoint", fn conn ->
send(test, :request_done)
# ...response
end)
trigger_work()
# Wait for the message
assert_received :request_done, :timer.seconds(3)
end
In case that helps anyone.
EDIT: This technique isn't reliable in all circumstances because the test can still end before the process finishes 😕. Which in my cases leads to a failure as the test is supervising and shuts down the process abnormally. send_after
could be used as a band-aid.
from bypass.
I just tripped exactly over the same stuff and was looking through the docs on how to solve this.
@danielemegna happy to help if you want to takle this issue!
from bypass.
@Odaeus I use the same technique, which is actually accepted in the community, cosidering that it's also suggested in the documentation of the Mox library.
In my case I usually do the following:
test "something" do
parent = self()
ref = make_ref()
Bypass.expect(bypass, "POST", "/endpoint", fn conn ->
# ...response
send(parent, {ref, :sent})
end)
trigger_work()
assert_receive {^ref, :sent}
end
from bypass.
Related Issues (20)
- Pipe expectations
- Add 'headers' param in expect and expect_once function HOT 1
- Building error with erlang 22 HOT 3
- Update cowlib dependency HOT 3
- How to use bypass with Finch? HOT 2
- How to test request timeout with bypass? HOT 2
- Any support for ranch 2.x? HOT 1
- Crash on shutdown in `dispatch_awaiting_callers` HOT 2
- bypass randomly fails with eaddrinuse error
- bypass does not support paths containing ":" HOT 2
- Error initializing bypass HOT 1
- Match on request body HOT 1
- dialyzer issue
- Elixir 1.15 incompatible? HOT 1
- Warning on Elixir 1.16 HOT 3
- Support for bandit instead plug_cowboy
- Multiple expect_once HOT 4
- New release? HOT 5
- Move primary documentation out of the README HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from bypass.