我正在尝试测试在控制器中执行不同操作的路由,无论请求是否为ajax。
public function someAction(Request $request)
{
if($request->ajax()){
// do something for ajax request
return response()->json(['message'=>'Request is ajax']);
}else{
// do something else for normal requests
return response()->json(['message'=>'Not ajax']);
}
}
我的测试:
public function testAjaxRoute()
{
$url = '/the-route-to-controller-action';
$response = $this->json('GET', $url);
dd($response->dump());
}
当我运行测试并且只是转储响应时,我会回来'不是ajax' - 这是有道理的我猜是因为 $ this-> json()只是期待一个json响应,不一定要发出ajax请求。但我怎样才能正确测试呢?我一直在评论......
// if($request->ajax(){
...need to test this code
// }else{
// ...
// }
每次我需要对该部分代码运行测试。我想在我的测试用例中寻找如何制作ajax请求...
答案 0 :(得分:9)
在Laravel 5.4测试 this-> post() 和 this-> get() 方法接受标头作为第三个参数。 将 HTTP_X-Requested-With 设置为 XMLHttpRequest
$this->post($url, $data, array('HTTP_X-Requested-With' => 'XMLHttpRequest'));
我在 tests / TestCase.php 中添加了两种方法,以方便使用。
<?php
namespace Tests;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
abstract class TestCase extends BaseTestCase
{
use CreatesApplication;
/**
* Make ajax POST request
*/
protected function ajaxPost($uri, array $data = [])
{
return $this->post($uri, $data, array('HTTP_X-Requested-With' => 'XMLHttpRequest'));
}
/**
* Make ajax GET request
*/
protected function ajaxGet($uri, array $data = [])
{
return $this->get($uri, array('HTTP_X-Requested-With' => 'XMLHttpRequest'));
}
}
然后在任何测试中,让我们说 tests / Feature / HomePageTest.php ,我可以这样做:
public function testAjaxRoute()
{
$url = '/ajax-route';
$response = $this->ajaxGet($url)
->assertSuccessful()
->assertJson([
'error' => FALSE,
'message' => 'Some data'
]);
}
答案 1 :(得分:2)
尝试const ipcRenderer = require("electron").ipcRenderer;
ipcRenderer.on('notes2', function(event, data) {
// this function never gets called
console.log(data);
});