mcustiel / phiremock Goto Github PK
View Code? Open in Web Editor NEWPhiremock mocks HTTP requests and REST services, allowing to mock external services during acceptance testing.
License: GNU General Public License v3.0
Phiremock mocks HTTP requests and REST services, allowing to mock external services during acceptance testing.
License: GNU General Public License v3.0
Could it be an option to switch phiremock and phiremock-codeception to a not so strict license regarding code publish when distributing the software, e.g. MIT, BSD or Apache?
First, I'd like to say thank you for this library!
The only annoyance I'm having at the moment is that it's a bit awkward to create a simple expectation, and the tests I write end up to be hard to read because of this.
So I'd like to suggest a shortcut for simple use cases, something like:
$phiremock->on('GET','/my/url')->then(200, $content);
on()
is not static anymore (one can always call new ExpectationBuilder manually if necessary)on()
can either take a RequestBuilder
(unchanged behavior) or 2 strings, in which case it builds RequestBuilder::create($param1)->andUrl(Is::EqualTo($param2))
by defaultthen()
can either take a ResponseBuilder
(unchanged behavior) or 2 strings, in which case it builds Respond::withStatusCode($param1)->andBody($param2)
This way it would take 1 line to write expectation for common use cases instead of the 8-10 needed at the moment.
What do you think? Is it something you would consider accepting as a PR?
Hi,
I have tested new feature Is::sameJsonObjectAs
. I have found that matching does not work correctly when similar request are made.
Lets have two POST requests with following jsons:
{ "foo": "1"}
and { "foo": "1", "bar": "2"}
.
When writing expectation like: A::postRequest()->andUrl(Is::equalTo("/api"))->andBody(Is::sameJsonObjectAs('{ "foo": "1", "bar": "2"}'));
The expectation always return me two matches. It should return one match.
Hi,
I noticed that method andPriority
of RequestBuilder
class doesn't return builder itself; but documentation show it should.
Using "matches" operator for URL I have unexpecred response.
For this expectation:
{
"request": {
"method": "GET",
"url": {
"matches": "~/hello~"
}
},
"response": {
"statusCode": 200,
"body": "Hello!"
}
}
I have the next result:
$ curl http://localhost:8086/hello
http://localhost:8086Hello!
And if the condition is strict (otherwise it seen on any match, for /i/dont/want/hello
too)
{
"request": {
"method": "GET",
"url": {
"matches": "~^/hello$~"
}
},
"response": {
"statusCode": 200,
"body": "Hello!"
}
}
I see the next:
$ curl http://localhost:8086/hello
http://localhost:8086/hello
It happens because of replacement in \Mcustiel\Phiremock\Server\Utils\Strategies\RegexResponseStrategy
:
private function fillWithUrlMatches($expectation, $httpRequest, $responseBody)
{
if ($this->urlConditionIsRegex($expectation)) {
$responseBody = preg_replace('/\$\{url\.(\d+)\}/', '\$$1', $responseBody);
return preg_replace(
$expectation->getRequest()->getUrl()->getValue(),
$responseBody,
$httpRequest->getUri()->__toString()
);
}
return $responseBody;
}
Here $expectation->getRequest()->getUrl()->getValue()
is "~/hello~"
, $responseBody
is "Hello!"
, and $httpRequest->getUri()->__toString()
is "http://localhost:8086/hello"
. The last value adds missmatch with search argument in response, and outputs if the condition isn't matches.
I don't know how to fix it in the best way, I'll think about it tommorow. I'll be happy to see ideas in comments.
Hi, first off great library!
I'd like to point out that setting minimum-stability to dev without adding prefer-stable true is very risky. All dependencies of the composer.json will then be loaded under dev stability, instead of possible stable.
Is there a way to get all (global) matches with one (or multiple) matcher?
Example Request:
[ { "name": "Foo" }, { "name": "Bar" } ]
So I can use this matches (in this example "names") in response by '{body.1}' , '{body.2}' and so on...
In a nutshell: I need a preg_match_all ;-)
Hi,
I am looking for a tool to do snapshot testing for third-party APIs, for example https://graph.facebook.com or Google Ad API.
I managed to install and configure Phiremock in a project and added an expectation, which I can get by using Insomnia as a client.
Now, I was trying to set up Phiremox with the Codeception module using the same expectation, but I failed to get it to run.
My use-case is as follows:
Am I right to think that Phiremock can do this?
If so, can you point me in the right direction to achieve this?
I guess point 4 is my problem, as I hope that Phiremock magically hijacks the call. Regrettably, I have tried to find out how to make this work, but I haven't been able to.
I have tried using
url": {
"isEqualTo": "https://graph.facebook.com/v10.0/act_866830094136812/campaigns"
},
to set the URL in the expectation
If I set it to
url": {
"isEqualTo": "/act_866830094136812/campaigns"
},
I can get the expectation with a call to localhost:8086/act_866830094136812/campaigns
from Insomnia.
In the Test I initialize a client by using
$phiremockClient = PhiremockClientFactory::createDefault()->createPhiremockClient(
new Host('localhost'),
new Port('8086')
);
but then, after reading all I could find, I don't know how to move forward.
I will appreciate any pointers and any help :)
Best,
Diego
I'm using newest version of reactphp/http(v0.8.3) but your project is locked on 0.7.x version and because of that I can't use it. I'm using features from 0.8 version so I can't downgrade that library.
Could you update your project to 0.8.x version?
Regards,
Kordos
Hey m8,
you are using PCNTL constants which are not working on Windows. This is breaking my test enviromnent at this moment.
File: PhiremockProccess.php
/**
* Stops the process.
*/
public function stop()
{
$this->process->signal(SIGTERM);
$this->process->stop(3, SIGKILL);
}
Right now phiremock only counts the received requests for a previously requested one, it should verify also requests was made even if they weren't expected.
I found the issue during expectation creation when I tried to add a binary data from image:
$expectation = Phiremock::on(
A::getRequest()
->andUrl(Is::equalTo('/test_images/image1.jpg'))
)->then(
Respond::withStatusCode(200)
->andBody(file_get_contents($testDataPath.'test_images/image1.jpg'))
->andDelayInMillis(2000)
);
Package versions:
mcustiel/creature v2.0.0
mcustiel/mockable-datetime 1.0.0
mcustiel/phiremock v1.7.1
mcustiel/phiremock-codeception-extension dev-master e52996c
mcustiel/php-simple-di 1.2.1
mcustiel/php-simple-request v3.1.0
mcustiel/power-route v3.0.0
Error:
An error occurred creating the expectation: Syntax error
.../vendor/mcustiel/phiremock/src/Client/Phiremock.php:281
.../vendor/mcustiel/phiremock/src/Client/Phiremock.php:269
.../vendor/mcustiel/phiremock/src/Client/Phiremock.php:74
.../vendor/mcustiel/phiremock-codeception-extension/src/Module/Phiremock.php:59
Hello my friend,
is there any reason to lock this plugin to Version 2.xx of Codeception?
Just asking because i wanted to use the latest stable codeception version, but that limit interrupts my plans.
Hi again, thanks a lot for this awesome library.
I came across a weird behavior, which I don't understand if it was by design or if it is a bug, please advise.
In my code I'm making a call to
GET /users?filters[id][0]=1&filters[id][1]=2&filters[id][3]=3
in my test, I'm trying to create an endpoint to phiremock that match exactly that url + querystring
ex:
$this->phiremock->expectARequestToRemoteServiceWithAResponse(
Phiremock::on(
A::getRequest()
->andUrl(Is::equalTo('/users?filters[id][0]=1&filters[id][1]=2&filters[id][3]=3'))
)->then(
Respond::withStatusCode($this->status_code);
)
);
The call fails, not matching the Phiremock endpoint
if I instead don't assert the query string
and use only Is::equalTo('/users')
that works.
My expectation was to see it pass if the url fully matches.
Any thoughts? ๐
I propose to support not stings only in request body, but native JSON too. It much easier to define, verify and looks good in IDE with JSON highlight. It's very hard to keep actual big JSON responses if they are already encoded, so I tried to improve it.
In current implementation JSON body is defined in the next way:
"request": {
"method": "GET",
"url": {
"isEqualTo" : "/example_service/some/resource"
}
},
"response": {
"statusCode": 200,
"body": "{\"id\": 1, \"description\": \"I am a resource\"}"
}
As you see you should escape quotes and it is not formatted.
I propose to support this definition.
"request": {
"method": "GET",
"url": {
"isEqualTo" : "/example_service/some/resource"
}
},
"response": {
"statusCode": 200,
"body": {
"id": 1,
"description": "I am a resource"
}
}
When you set a mock result longer than 28K chars, phiremock hangs, but only in debug mode. I assume this is due to an issue with the log writing code.
EDIT: it seems to be related to a total size of all expectARequestToRemoteServiceWithAResponse
calls.
As documentation says expactations list is got with:
use Mcustiel\Phiremock\Client\Phiremock;
$phiremock = new Phiremock('phiremock.server', '8080');
$expectations = $phiremock->listExpectations();
But this code failes with
[Doctrine\Common\Annotations\AnnotationException] [Semantical Error] The annotation "@Mcustiel\SimpleRequest\Annotation\Validator\NotNull" in property Mcustiel\Phiremock\Domain\Expectation::$request does not exist, or could not be auto-loaded.
This is because auto-loader is not registered in Doctrine\Common\Annotations\AnnotationRegistry
.
Tests are green because the loader is registered in _bootstrap.php
. I think that annotations should be registered in the box, and Client construct should be enough.
Just wondering if there was a specific reason for the Symfony version lock being <5.0
before embarking on a PR to remedy this?
Hi,
Could you consider to provide phiremock in different packages... at least phiremock-client
and phiremock-server
?
It would reduce dependencies when using the "client" part on a project.
Thanks,
Regards.
We need to make expectations for explicit JSON structures, but:
In other words, we would like to match that, for example, this was sent through request:
{"name": "John", "surname": "Deer", "tags": ["a", "b"]}
even if it was sent in pretty format:
{
"name": "John",
"surname": "Deer",
"tags": ["a", "b"]
}
or condensed:
{"name":"John","surname":"Deer","tags":"a","b"]}
or even in different order:
{"name": "John", "tags": ["a", "b"], "surname": "Deer"}
Recursivity should be supported.
Hello,
Can Phiremock mock a response file like csv ?
I found bodyFileName in wiremock but nothing in phiremock
thanks
Hi,
I use Phiremock with the extension for codeception. When I create the same expectation a few times (about 15), the test command freezes.
After some debugging, I found out that the request created in Mcustiel\Phiremock\Client\Phiremock\createExpectation sometimes falls in timeout. I tried to add a timeout option to the Guzzle client, but it stills freeze.
Do you know how I can get some more information about this for debugging ? It seems that it is caused by the phiremock CLI that does not respond after a few calls to its api.
The bin/phiremock file uses Monolog, but where does Monolog writes its logs ?
Hi, This library is great, thanks!
However, while I was writing some tests, I was trying to mock a request with the HTTP verb PATCH but unfortunately phiremock
doesn't seem to support this verb. The A::
class doesn't have the method: patchRequest
which then I'm unable to mock the call.
Do you have any workaround on this?
Do you plan to support PATCH HTTP verb as it commonly used in REST to update partially resources?
Thanks a lot!
We would like have ability to restore server state after start, that includes clean requests and states info and restored expectations - clean expectations added with API and keep expectations defined in JSON files.
It will be used to make cleanup before test.
Hi,
I've a strange issue (see trace below); so digging and reading trace, method Mcustiel\Phiremock\Domain\Expectation::setRequest($request)
and Mcustiel\Phiremock\Domain\Expectation::setResponse($response)
receive array instead of \Mcustiel\Phiremock\Domain\Request
and \Mcustiel\Phiremock\Domain\Response
.
I haven't dig deeper right now (but will try to debug...)
To have more context, you can check it here
[2019-03-20 22:41:50] stdoutLogger.INFO: Starting Phiremock... [] []
[2019-03-20 22:41:50] stdoutLogger.INFO: Phiremock http server listening on 0.0.0.0:8080 [] []
PHP Fatal error: Method Mcustiel\Phiremock\Domain\Expectation::__toString() must not throw an exception, caught Error: Call to a member function __toString() on array in phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/Base/AbstractRequestAction.php on line 0
PHP Stack trace:
PHP 1. {main}() /Users/florianlevis/phiremock.phar:0
PHP 2. require() /Users/florianlevis/phiremock.phar:10
PHP 3. require() phar:///Users/florianlevis/phiremock.phar/bin/phiremock:3
PHP 4. Mcustiel\Phiremock\Server\Http\Implementation\ReactPhpServer->listen() phar:///Users/florianlevis/phiremock.phar/bin/phiremock.php:81
PHP 5. React\EventLoop\StreamSelectLoop->run() phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:102
PHP 6. React\EventLoop\StreamSelectLoop->waitForStreamActivity() phar:///Users/florianlevis/phiremock.phar/vendor/react/event-loop/src/StreamSelectLoop.php:211
PHP 7. React\Stream\DuplexResourceStream->handleData() phar:///Users/florianlevis/phiremock.phar/vendor/react/event-loop/src/StreamSelectLoop.php:244
PHP 8. React\Stream\DuplexResourceStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/stream/src/DuplexResourceStream.php:193
PHP 9. React\Stream\Util::React\Stream\{closure:phar:///Users/florianlevis/phiremock.phar/vendor/react/stream/src/Util.php:70-72}() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 10. React\Socket\Connection->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/stream/src/Util.php:71
PHP 11. React\Http\Io\RequestHeaderParser->feed() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 12. React\Http\Io\RequestHeaderParser->parseAndEmitRequest() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/RequestHeaderParser.php:47
PHP 13. React\Http\Io\RequestHeaderParser->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/RequestHeaderParser.php:59
PHP 14. React\Http\StreamingServer->React\Http\{closure:phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/StreamingServer.php:172-181}() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 15. React\Socket\Connection->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/StreamingServer.php:179
PHP 16. React\Http\Io\CloseProtectionStream->handleData() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 17. React\Http\Io\CloseProtectionStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/CloseProtectionStream.php:96
PHP 18. React\Http\Io\LengthLimitedStream->handleData() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 19. React\Http\Io\LengthLimitedStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/LengthLimitedStream.php:87
PHP 20. React\Http\Io\HttpBodyStream->handleEnd() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 21. React\Http\Io\HttpBodyStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/HttpBodyStream.php:178
PHP 22. Mcustiel\Phiremock\Server\Http\Implementation\ReactPhpServer->Mcustiel\Phiremock\Server\Http\Implementation\{closure:phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:146-149}() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
PHP 23. Mcustiel\Phiremock\Server\Http\Implementation\ReactPhpServer->onRequest() phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:147
PHP 24. Mcustiel\Phiremock\Server\Phiremock->execute() phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:127
PHP 25. Mcustiel\PowerRoute\PowerRoute->start() phar:///Users/florianlevis/phiremock.phar/src/Server/Phiremock.php:57
PHP 26. Mcustiel\PowerRoute\PowerRoute->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/PowerRoute.php:64
PHP 27. Mcustiel\PowerRoute\Actions\GoToAction->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/PowerRoute.php:90
PHP 28. Mcustiel\PowerRoute\PowerRoute->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/Actions/GoToAction.php:14
PHP 29. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/PowerRoute.php:90
PHP 30. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->processAndGetResponse() phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/AddExpectationAction.php:68
PHP 31. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->createObjectFromRequestAndProcess() phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/Base/AbstractRequestAction.php:106
PHP 32. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->parseRequestObject() phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/Base/AbstractRequestAction.php:147
Fatal error: Method Mcustiel\Phiremock\Domain\Expectation::__toString() must not throw an exception, caught Error: Call to a member function __toString() on array in phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/Base/AbstractRequestAction.php on line 0
Call Stack:
0.0084 815592 1. {main}() /Users/florianlevis/phiremock.phar:0
0.0101 808064 2. require('phar:///Users/florianlevis/phiremock.phar/bin/phiremock') /Users/florianlevis/phiremock.phar:10
0.0104 826880 3. require('phar:///Users/florianlevis/phiremock.phar/bin/phiremock.php') phar:///Users/florianlevis/phiremock.phar/bin/phiremock:3
0.0305 3072528 4. Mcustiel\Phiremock\Server\Http\Implementation\ReactPhpServer->listen() phar:///Users/florianlevis/phiremock.phar/bin/phiremock.php:81
0.0329 3200936 5. React\EventLoop\StreamSelectLoop->run() phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:102
8.6351 3426648 6. React\EventLoop\StreamSelectLoop->waitForStreamActivity() phar:///Users/florianlevis/phiremock.phar/vendor/react/event-loop/src/StreamSelectLoop.php:211
8.6351 3427128 7. React\Stream\DuplexResourceStream->handleData() phar:///Users/florianlevis/phiremock.phar/vendor/react/event-loop/src/StreamSelectLoop.php:244
8.6352 3428296 8. React\Stream\DuplexResourceStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/stream/src/DuplexResourceStream.php:193
8.6352 3428296 9. React\Stream\Util::React\Stream\{closure:phar:///Users/florianlevis/phiremock.phar/vendor/react/stream/src/Util.php:70-72}() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6352 3428672 10. React\Socket\Connection->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/stream/src/Util.php:71
8.6352 3428672 11. React\Http\Io\RequestHeaderParser->feed() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6352 3428672 12. React\Http\Io\RequestHeaderParser->parseAndEmitRequest() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/RequestHeaderParser.php:47
8.6375 3605472 13. React\Http\Io\RequestHeaderParser->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/RequestHeaderParser.php:59
8.6375 3605472 14. React\Http\StreamingServer->React\Http\{closure:phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/StreamingServer.php:172-181}() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6388 3777392 15. React\Socket\Connection->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/StreamingServer.php:179
8.6388 3777392 16. React\Http\Io\CloseProtectionStream->handleData() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6388 3777768 17. React\Http\Io\CloseProtectionStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/CloseProtectionStream.php:96
8.6388 3777768 18. React\Http\Io\LengthLimitedStream->handleData() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6388 3777768 19. React\Http\Io\LengthLimitedStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/LengthLimitedStream.php:87
8.6388 3777768 20. React\Http\Io\HttpBodyStream->handleEnd() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6388 3777768 21. React\Http\Io\HttpBodyStream->emit() phar:///Users/florianlevis/phiremock.phar/vendor/react/http/src/Io/HttpBodyStream.php:178
8.6388 3777768 22. Mcustiel\Phiremock\Server\Http\Implementation\ReactPhpServer->Mcustiel\Phiremock\Server\Http\Implementation\{closure:phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:146-149}() phar:///Users/florianlevis/phiremock.phar/vendor/evenement/evenement/src/Evenement/EventEmitterTrait.php:123
8.6392 3815256 23. Mcustiel\Phiremock\Server\Http\Implementation\ReactPhpServer->onRequest() phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:147
8.6400 3865088 24. Mcustiel\Phiremock\Server\Phiremock->execute() phar:///Users/florianlevis/phiremock.phar/src/Server/Http/Implementation/ReactPhpServer.php:127
8.6400 3865088 25. Mcustiel\PowerRoute\PowerRoute->start() phar:///Users/florianlevis/phiremock.phar/src/Server/Phiremock.php:57
8.6403 3872952 26. Mcustiel\PowerRoute\PowerRoute->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/PowerRoute.php:64
8.6417 3915456 27. Mcustiel\PowerRoute\Actions\GoToAction->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/PowerRoute.php:90
8.6417 3915456 28. Mcustiel\PowerRoute\PowerRoute->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/Actions/GoToAction.php:14
8.6428 4126456 29. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->execute() phar:///Users/florianlevis/phiremock.phar/vendor/mcustiel/power-route/src/PowerRoute.php:90
8.6428 4126776 30. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->processAndGetResponse() phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/AddExpectationAction.php:68
8.6428 4126776 31. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->createObjectFromRequestAndProcess() phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/Base/AbstractRequestAction.php:106
8.6428 4126776 32. Mcustiel\Phiremock\Server\Actions\AddExpectationAction->parseRequestObject() phar:///Users/florianlevis/phiremock.phar/src/Server/Actions/Base/AbstractRequestAction.php:147
[2019-03-20 22:41:59] stdoutLogger.INFO: Stopping Phiremock... [] []
[2019-03-20 22:41:59] stdoutLogger.INFO: Bye bye [] []
Phiremock v1.8.0 requires symfony/cache
in ^3.1
so when I want to install it in SF4 project it rises error: "Your requirements could not be resolved to an installable set of packages".
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.