Comments (9)
I temporarily switched to https://github.com/spatie/laravel-fractal to see if the issue would still persist, and it did. Which causes me to believe this may not be an issue with this package, and rather with Laravel or Fractal instead.
This is completely perplexing me at this point. I can't imagine why this would work in practice but fail during automated tests. Very odd. Would love to hear from the creator of this package to see if he ever successfully application tested relationships.
from api-response.
I'll try to take a look at it. Thank you for the report
from api-response.
@imjohnbon I found the problem, but not the solution for now.
The problem is simple, it's because the parsing is triggered on the boot method of the service provider like this : $manager->parseIncludes(explode(',', $this->app['Illuminate\Http\Request']->get('include')));
So at this point, when the http request occur, the content of the request is populate with the include
value.
BUT, in the testing process, we are not doing the normal http request. Laravel doing a internal call via $this->call
and the value of includes was already loaded and will NOT be refresh.
For now, the only way i see to resolve this is to replace the method in Illuminate\Foundation\Testing\Concerns\MakesHttpRequests::call
by this code
/**
* Call the given URI and return the Response.
*
* @param string $method
* @param string $uri
* @param array $parameters
* @param array $cookies
* @param array $files
* @param array $server
* @param string $content
* @return \Illuminate\Http\Response
*/
public function call($method, $uri, $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
{
$kernel = $this->app->make('Illuminate\Contracts\Http\Kernel');
$this->currentUri = $this->prepareUrlForRequest($uri);
$this->resetPageContext();
$symfonyRequest = SymfonyRequest::create(
$this->currentUri, $method, $parameters,
$cookies, $this->filterFiles($files), array_replace($this->serverVariables, $server), $content
);
$request = Request::createFromBase($symfonyRequest);
$response = app(\EllipseSynergie\ApiResponse\Contracts\Response::class);
$response
->getManager()
->parseIncludes(explode(',', $request->get('include')));
$response = $kernel->handle($request);
$kernel->terminate($request, $response);
return $this->response = $response;
}
This code will intercept the new Request object and parse the include value.
Someday i may probably create some Trait
to help people resolve that issue.
from api-response.
Thanks for the update! I figured it was something like that. Unfortunately editing core Laravel files isn't an option for me or most people I would assume. Hopefully one day this can be solved within the package.
from api-response.
@imjohnbon You just have to create your own call
method in the TestCase
class for now if you want a quick fix.
from api-response.
Ah of course, thanks for the tip!
from api-response.
@maximebeaudoin can provide a code snippet on hwo to create m own call
method in TestCase
from api-response.
@mehrdaad I have create a trait to resolve this. https://github.com/ellipsesynergie/api-response/blob/master/src/Testing/Laravel/AddTestingSupportForInclude.php
from api-response.
@maximebeaudoin thanks, I had a suggestion for this trait, Could we convert call
to a private function and create 3 or 4 protected functions like get
, post
etc to keep Laravel signature untouched?
One problem I can think of it that it would create confusion for the trait client.
Any suggestions?
from api-response.
Related Issues (20)
- Possibility to pass headers to error responses HOT 2
- How to add custom response properties? HOT 2
- Update Fractal package HOT 2
- Handle Form Request Validation HOT 1
- Error code references as "self" prevent extensibility HOT 1
- Class 'App\Http\Controllers\BookTransformer' not found HOT 1
- Return response from Laravel's Handler (now that api() macro is deprecated) HOT 2
- Testing withPaginator method HOT 1
- Changing customKey HOT 4
- Base RAML template HOT 1
- Retrun validation errors
- Lumen5.4 not parse include HOT 2
- set includes for response HOT 1
- ParseInclude middleware error HOT 1
- How to use HTTP status constants defined in Symfony\Component\HttpFoundation\Response? HOT 1
- withCollection method gives bad json output. I can't convert it to array. HOT 4
- Feature testing with ->get or ->json doesn't pass include string to Manager HOT 4
- return json need $options HOT 5
- Call to undefined method Illuminate\Foundation\Application::middleware() HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from api-response.