phpunit.xml
中添加 dingo
相关配置
1 2 3 4 5 6
| <env name="API_STANDARDS_TREE" value="x"/> <env name="API_SUBTYPE" value="prime"/> <env name="API_VERSION" value="v1"/> <env name="API_DEFAULT_FORMAT" value="json"/> <env name="API_STRICT" value="false"/> <env name="API_PREFIX" value="api"/>
|
dingo
的路由配置文件包含不能使用 require_once
。
否则, 可能会出现一种情况是, phpunit
中第一个请求成功了,
但是后面的请求都 404。
这里涉及到的一个知识点是:laravel 或 lumen phpunit
中每一个 test
都会使用独立的 Application
以及
TestCase
实例来运行,我们知道,框架在初始化的时候会加载路由的配置,如果我们的进程只跑一遍,这样其实没什么问题。
但是,phpunit
中的 TestCase
是,一个进程,然后一个 TestCase
里面有多少
test
方法,就会进行多少次框架的初始化操作,这样问题就出现了,后续的请求中,require_once
不能再读取到任何配置信息,因此导致了后续请求全部 404 了。
所以需要使用 require
代替
require_once
。
知识点:同一个进程中,require_once
只有第一次
require
会执行文件里面的内容,后续 require
不再加载文件。
在测试中添加以下方法调用
phpunit.xml
中添加 dingo
相关配置
1 2 3 4 5 6
| <env name="API_STANDARDS_TREE" value="x"/> <env name="API_SUBTYPE" value="prime"/> <env name="API_VERSION" value="v1"/> <env name="API_DEFAULT_FORMAT" value="json"/> <env name="API_STRICT" value="false"/> <env name="API_PREFIX" value="api"/>
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
| public function setUp() { parent::setUp(); $user = \Modules\User\Models\User::with(['company'])->find(61339); $this->actingAsApi($user); }
protected function actingAsApi($user) { $auth = Mockery::mock('Dingo\Api\Http\Middleware\Auth[handle]', [ Mockery::mock('Dingo\Api\Routing\Router'), Mockery::mock('Dingo\Api\Auth\Auth'), ]); $auth->shouldReceive('handle') ->andReturnUsing(function ($request, \Closure $next) { return $next($request); }); $this->app->instance('Dingo\Api\Http\Middleware\Auth', $auth); $auth = Mockery::mock('Dingo\Api\Auth\Auth[user]', [ app('Dingo\Api\Routing\Router'), app('Illuminate\Container\Container'), [], ]); $auth->shouldReceive('user') ->andReturnUsing(function () use ($user) { return $user; }); $this->app->instance('Dingo\Api\Auth\Auth', $auth); return $this; }
|