apache / apache/grails-core

Inject Micronaut Http client at integrationstests

Đang mở
#11,368 3 bình luận 0 reaction 0 người được giao Xem trên GitHub
relates-to: micronaut
Ngôn ngữ chính
Groovy
Star
2.9k
Fork
975
Merge trung bình
1 ngày 22 giờ
Pull request đã merge (30 ngày)
92

Mô tả

Thanks for reporting an issue for Grails framework, please review the task list below before submitting the
issue. Your issue report will be closed if the issue is incomplete and the below tasks not completed.

NOTE: If you are unsure about something and the issue is more of a question a better place to ask questions is on Stack Overflow (http://stackoverflow.com/tags/grails) or Slack (http://slack-signup.grails.org). DO NOT use the issue tracker to ask questions.

### Task List

- [x] Steps to reproduce provided
- [n/a] Stacktrace (if present) provided
- [n/a] Example that reproduces the problem uploaded to Github
- [x] Full description of the issue provided (see below)

### Steps to Reproduce
When doing automatic integration testing in Micronaut, I can inject the embedded httpServer without specifying host nor port. This is very convenient as the port is randomised by default in tests.

Here is an example Spock testcase from Micronaut, where I have a HelloController that returns "Hello World":
```
@Inject
@Client('/') // <-- no need to specify port nor host
RxHttpClient client

void "call app"() {
when:
String reply = client.toBlocking().retrieve('/hello')

then:
reply == 'Hello World'
}
```

With Micronaut HTTP client being introduced in Grails 4.0, it would be very nice if we could avoid having to specify the hostname and port for Micronaut HTTP client in Grails integrationtests as well.

Right now I am doing this to get the Micronaut HTTP client in my integrationtests in Grails:
```
@LocalServerPort
Integer localServerPort // random port in tests

BlockingHttpClient httpClient

def setup() {
httpClient = httpClient ?: HttpClient.create(new URL("http://localhost:${localServerPort}")).toBlocking()
}
```

It would be very nice if I could do like in Micronaut:
```
@Inject
@Client('/') // <-- no need to specify port nor host
RxHttpClient client
```
### Expected Behaviour
the http client should be injected without needing to specify port and host

### Actual Behaviour
the http client does not get injected

### Environment Information

- **Operating System**: Ubuntu 18.04
- **Grails Version:** 4.0.0
- **JDK Version:** 8u212
- **Container Version (If Applicable):** N/A

### Example Application

- N/A - it is a feature request

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Hướng nghiên cứu

Bắt đầu bằng cách xác định thiết lập kiểm thử tích hợp của Grails và wiring @Inject/@Client của Micronaut được mô tả trong issue. Kiểm tra cách cổng ngẫu nhiên của embedded server được expose, sau đó xác minh rằng một HTTP client có thể được inject trong một integration test mà không cần chỉ định host hoặc port.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Đánh giá

Công nghệ
groovy
Lĩnh vực
backend, testing
Loại issue
Tính năng
Độ khó
4/5
Thời gian dự kiến
3-5 ngày
Mức độ hoạt động
Đình trệ
Độ rõ ràng
Khá rõ ràng
Mức phù hợp với người mới
35/100

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.