我有一個控制器端點,它在引擎下做了一個外部API請求,我不能在每次運行測驗時都做這個請求。
我正在使用HttpClientInterface來進行請求,現在我的想法是用MockHttpClient來代替它。所以,到目前為止,我的想法是這樣的:
class MyControllerTest extends WebTestCase
{
public function testSomething(/span>)。void: .
{
$client = static::createClient()。
$response = new MockResponse(null, ['http_code' => 200] )。)
$client->getContainer()->set(HttpClientInterface::class, new MockHttpClient($response) )。)
$client->request('GET', '/my-end-point') 。
self::assertResponseIsSuccessful()。
}
但它給我帶來了以下錯誤:
"SymfonyContractsHttpClientHttpClientInterface"服務是private,你不能替換它。
這有點說不通。是否有更好的解決方案或如何克服這個問題?
uj5u.com熱心網友回復:
在Symfony環境中,服務是私有的,但這不是一個問題,因為你是通過依賴注入在你的控制器、服務等中得到它們的,也就是說,是Symfony自己在處理這些問題。
在嘗試測驗時,你可能會像你的案例那樣,直接在容器中設定模擬類。
這將引發你所看到的錯誤。
為了克服這個錯誤,在位于組態檔中的 services.yaml 檔案中,只需在底部添加以下幾行即可:
when@test:
服務。
_defaults:
public: true。
test.SymfonyContractsHttpClientHttpClientInterface。'@SymfonyContractsHttpClientHttpClientInterface'。
你在這里做的是告訴Symfony,在測驗期間,你將有一個名為test.SymfonyContractsHttpClientHttpClientInterface的公共服務,它是HTTPClientInterface類的一個副本。
現在,在你的測驗代碼中,你可以做以下事情:
$response = new MockResponse(null, ['http_code' => 200])。)
$client->getContainer()->('test. SymfonyContractsHttpClientHttpClientInterface', new TraceableHttpClient(new MockHttpClient($response) )。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/328351.html
標籤:
上一篇:使用VBA腳本將全名決議成部分
下一篇:如何將字串決議為更可行的鍵值?
