httptest | A Test Environment for HTTP Requests in R | Mock library
kandi X-RAY | httptest Summary
kandi X-RAY | httptest Summary
httptest makes it easy to write tests for code and packages that wrap web APIs. Testing code that communicates with remote servers can otherwise be painful: things like authentication, server state, and network flakiness can make testing seem too costly to bother with. The httptest package enables you to test all of the logic on the R sides of the API in your package without requiring access to the remote service. Importantly, it provides multiple contexts that mock the network connection and tools for recording real requests for future offline use as fixtures, both in tests and in vignettes. The package also includes additional expectations to assert that HTTP requests were---or were not---made. Using these tools, you can test that code is making the intended requests and that it handles the expected responses correctly, all without depending on a connection to a remote API. The ability to save responses and load them offline also enables you to write package vignettes and other dynamic documents that can be distributed without access to a live server. This package bridges the gap between two others: (1) testthat, which provides a useful (and fun) framework for unit testing in R but doesn't come with tools for testing across web APIs; and (2) httr, which makes working with HTTP in R easy but doesn't make it simple to test the code that uses it. httptest brings the fun and simplicity together.
Support
Quality
Security
License
Reuse
Top functions reviewed by kandi - BETA
Currently covering the most popular Java, JavaScript and Python libraries. See a Sample of httptest
httptest Key Features
httptest Examples and Code Snippets
test_that("Requests happen", {
expect_s3_class(GET("http://httpbin.org/get"), "response")
expect_s3_class(
GET("http://httpbin.org/response-headers",
query = list(`Content-Type` = "application/json")),
"response"
)
})
with_mock_a
install.packages("httptest")
# install.packages("remotes")
remotes::install_github("nealrichardson/httptest")
Community Discussions
Trending Discussions on httptest
QUESTION
TLDR: There is a go-chi
middleware that is making an external call to authorise the request. I need to mock what it does.
Details:
I have this test:
...ANSWER
Answered 2022-Mar-24 at 13:14A very basic rule of a testable code says that you cannot just create new services inside your other services. You need to inject it, and prepare an interface if there is none already for the whatever is resty.New
returning. That way you can inject your mock in the tests.
Then you can use for example https://pkg.go.dev/github.com/stretchr/testify/mock for generating mocks and saying what should be the returned value by your mocked service.
Update after comment:
QUESTION
I am using go-sqlmock
for the first time and I am trying to write a test for post operation. I am using gorm
and gin
.
- The test is giving me an error where
s.mock.ExpectQuery(regexp.QuoteMeta(....
I am not what is the issue here. I have posted both the test and the output. - Also, (this has nothing to do with 1) in this test I really do not know what the
code
will be as it is randomly generated in the api controller. Is there a way to assign a generic number in thecode
field.
The test file
...ANSWER
Answered 2022-Jan-24 at 08:37Solution to the first issue:
when using testify/suite
, There are bunch of methods if created for the Suite
struct, they will be automatically executed when running the test. That being said, These methods will pass through an interface filter. In the case of .SetupSuite
, it has to have NO arguments and No return, in order to run.
Solution to the second issue:
There is a way in go-sqlmock
to match any kind of data by using sqlmock.AnyArg()
.
Fixed code:
QUESTION
We are running a C# application (.net Core 3.1) on ubuntu 18.04. The application does a http request to a self-signed https endpoint, but that request is canceled. I managed to reproduce it using the following snippet:
...ANSWER
Answered 2022-Jan-03 at 15:22It turned out to be a firewall issue, but a very pesky one.
- In our CA certificate there was a pki.ourdomain.org defined.
- The C# HTTP library called that URL at some point during the request (despite the ServerCertificateCustomValidationCallback returning true)
- Curl and python (requests) do not make this call so they dont timeout.
- Our firewall discarded the request to this pki domain, without any error or response.
- This caused the HTTP request to eventually timeout without any relevant error message.
When we found out this cause we added the pki.* url to the firewall rules. A more hacky solution without firewall changes is be to add pki.ourdomain.org to direct to localhost. This makes the pki request fail instantly, and the original request is executed normally.
I still dont fully understand why the C# library has this behaviour and other clients do not, but I hope this may help someone.
QUESTION
I have a strange situation. I want to return the content type application/json; charset=utf-8
from an http handler.
ANSWER
Answered 2021-Dec-28 at 13:16From the http package docs:
WriteHeader sends an HTTP response header with the provided status code.
and
Changing the header map after a call to WriteHeader (or Write) has no effect unless the modified headers are trailers.
So you are setting the "Content-Type" header after the header has already been sent out to the client. While mocking this likely works because the buffer where the headers are stored can be modified after the WriteHeader
call. But when actually using a TCP connection you can't do this.
So simply move your w.WriteHeader(http.StatusOK)
so it happens after the w.Header().Set(...)
QUESTION
I have a service to get db data and get others data from third party api.
Like this:
...ANSWER
Answered 2021-Dec-23 at 05:29I am assuming "integration test" means you will be running your entire application and then testing the running instance together with its dependencies (in your case a database & third party service). I assume you do not mean unit testing.
For integration tests you have a few options. In my case, usually I would integration test including whatever the third party client is connecting to (no mocking) because I want to test the integration of my service with the third party one. Or if that is not possible I might write a simple stub application with the same public interface as the third party service and run it on localhost (or somewhere) for my application to connect to during testing.
If you don't want to or can't do either of those and want to stub the external dependency inside your Go application, you can write an interface for the third party client and provide a stubbed implementation of the interface when running integration tests (using a flag on your application to tell it to run in "stubbed" mode or something of that nature).
Here's an example of what this might look like. Here's the source code file you posted - but using an interface for getting the third party data:
QUESTION
I'm testing GetCats() which is a function that gets all 'cats' from a mysql database. When I hit the endpoint through postman, there are no nil pointer errors due to 'COALESCE' which sets the field to an empty string if null.
However, when I test the function, there is a nil pointer error and the program panics out.
panic: runtime error: invalid memory address or nil pointer dereference [recovered]
_test.go
...ANSWER
Answered 2021-Nov-25 at 04:50Probably the Db object is not initialized properly in the test. You'd better define a struct and inject DB as dependency and use a fake DB object in your test. For example,
QUESTION
I am trying to get to grips with testing using the httptest.NewServer and I am hitting a roadblock.
In my code I am making a GET request to an external API and I want to write a test for this using httptest.NewServer.
Here is my code making the request (main.go):
...ANSWER
Answered 2021-Nov-25 at 02:21Your GetData()
's return is a pointer. You run GetData()
in main.go
, when retun, it will close the resp.body
. And if you read it again, it cause http: read on closed response body
So if you want read the body again, you should not return *http.Response
, you should clone the resp.body
to return
QUESTION
Followup question to: How do I guarantee that the request happened correctly when mocking an API?
main.go
ANSWER
Answered 2021-Nov-24 at 20:27You could create a new server for each test case.
Or you can use channels, specifically a map of channels where the key is the test case's identifier, e.g.
QUESTION
Let's say I'm testing a feature that calls a web service, and that service is mocked with httptest.NewServer
ANSWER
Answered 2021-Nov-23 at 21:19You can do it like this:
QUESTION
I am new to Go and recently, I am trying to write test cases using gomock package. I encountered a strange problem. I am trying to write test case for GetUsers
whose
implementation is
ANSWER
Answered 2021-Nov-14 at 20:37This happens because when you do expected := mock_data.Users
you are making a copy of the slice header, but not the underlying array, so changes to the array of the first slice will change the other. Please take a look at this article for more details.
If you want to make a copy of the slice you need to use the builtin copy
function, like so:
Community Discussions, Code Snippets contain sources that include Stack Exchange Network
Vulnerabilities
No vulnerabilities reported
Install httptest
Support
Reuse Trending Solutions
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from over 650 million Knowledge Items
Find more librariesStay Updated
Subscribe to our newsletter for trending solutions and developer bootcamps
Share this Page