我正在使用一个库将发送请求发送到确实作业https://github.com/jobapis/jobs-indeed。
我已经设置了提供程序,因此我可以轻松地模拟请求,而且也不必每次使用时都设置我的凭据。
此库有2个类。查询和提供程序类。 Provider类负责发出http请求。
我可以模拟Query类,但是不能模拟Provider类。
提供者:
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use JobApis\Jobs\Client\Queries\IndeedQuery;
use JobApis\Jobs\Client\Providers\IndeedProvider;
class JobSearchServiceProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
// Register Indeeds API
$this->app->bind(IndeedQuery::class, function() {
// Build the required fields for indeeds api
$indeed = new IndeedQuery([
'publisher' => config('services.indeed.publisher'),
'format' => 'json',
'v' => '2',
]);
return $indeed;
});
$this->app->bind(IndeedProvider::class, function() {
// Use an empty query object so that we can initialise the provider and add the query in the controller.
$queryInstance = app('JobApis\Jobs\Client\Queries\IndeedQuery');
return new IndeedProvider($queryInstance);
});
}
}
控制器:
public function searchIndeed(Request $request, IndeedQuery $query, IndeedProvider $client)
{
dump($query); // Returns a mockery object
dd($client); // Returns original object
}
测试:
public function testSearchIndeed()
{
$user = factory(User::class)->create();
$this->mock(IndeedQuery::class);
$this->mock(IndeedProvider::class);
$this->actingAs($user)
->get('indeed')
->assertStatus(200);
}
为什么要嘲笑InstantQuery但不能嘲笑InstantProvider?
答案 0 :(得分:0)
发现了问题。
如果您尝试模拟不存在的类,则模拟不会抛出错误。要求上课时,我在考试中遇到拼写错误。
控制器
use JobApis\Jobs\Client\Providers\IndeedProvider;
测试
use JobApis\Jobs\Client\Provider\IndeedProvider; // Notice missing 's'
使用嘲讽时,如果该类不存在,则不会出现错误。因此,如果嘲笑对象没有得到解决,请检查其拼写。