在改进版本中,我们使用symfony的scoped的http客户端代替原来的guzzle client。这样做的优点是,把一些基本的host配置可以从代码中抽出来,放入yaml配置中。这样在使用中,只要使用对应的名字,symfony框架就会把对应的已经配置好host的http client注入。
在测试中,我们使用的symfony提供的mock client而不是真正的scoped client,免得发出真正的http请求。
目前的问题是,除了http client,我们还有一个考虑到不同stroefront的client,称为“storefrontAwareClient”。它是在http client外面再包裹的一层。主要是解决,不同的国家(storefront)使用不同的base url和header。
在集成测试用,发现注入的不是mock client,而是真的scoped client。所以需要对stroefront进行针对测试环境的配置。保证在测试中,它注入的也是mock client
StorefrontAwareClient. 它替代了本来MarketplaceLoyaltyAccountService的部分功能
找到原因
1 测试中使用“personalized_coupons.client”未配置。因为配置被改名了。加入该key,并指出它是mock的httpClient后,问题解决
关于scope配置
在创建scoped client的配置里,有一个选项是scope。一直到我看了源码后才明白它的作用。当请求一个URL的时候,可以匹配scope里的正则表达,只有匹配的情况下,才会使用该配置。如果不匹配,请求也能发出,但是配置里的东西不会被发出。这样保证,一些秘密不会因为错误的配置被发送到其他网站。
一开始我还以为是某种强制的检查,如果不匹配就会抛除异常。