解決未定義的變量在使用PHPUnit進行測試的存儲()時laravel -4-
我有路由確實向商店一個POST路徑()在控制器中。
我試圖測試該動作是否正常工作。
控制器:
public function store() {
$d= Input::json()->all();
//May need to check here if authorized
$foo= new Foo;
$d = array();
$d['name'] = $d['name'];
$d['address'] = $d['address'];
$d['nickname'] = $d['nickname'];
if($foo->validate($d))
{
$new_foo= $foo->create($d);
return Response::json(Foo::where('id','=',$new_foo->id)->first(),200);
}
else
{
return Response::json($foo->errors(),400);
}
}
現在,我想這一點使用一個名爲FooTest.php
這裏新類來測試目前我正在努力做,使檢查工作中的作用:
public function testFooCreation()
{
$jsonString = '{"address": "82828282", "email": "[email protected]", "name":"Tester"}';
$json = json_decode($jsonString);
$this->client->request('POST', 'foo');
$this->assertEquals($json, $this->client->getResponse());
}
當我在我的cmd中運行phpunit時,出現錯誤,指出「名稱」未定義。我知道我並沒有將任何事情傳遞給請求,所以我肯定沒有任何事情正在被檢查,但我的問題是我如何確實通過我的JSON字符串來檢查?
每次我把$ json放在客戶端請求中,它會要求一個數組,但是當我將json字符串轉換爲數組時,json_decode需要一個字符串。
UPDATE
我與輸入數據的傳遞亂搞,我碰到這個傳來:
$input = [
'name' => 'TESTNAME',
'address' => '299 TESTville',
'nickname' => 't'
];
Input::replace($input);
Auth::shouldReceive('attempt')
->with(array('name' => Input::get('name'),
'address' => Input::get('address'),
'nickname' => Input::get('nickname')))
->once()
->andReturn(true);
$response = $this->call('POST', 'foo', $input);
$content = $response->getContent();
$data = json_decode($response->getContent());
但每當我運行測試,我仍然得到「名稱:未定義」這是仍然沒有通過我創建的輸入。
爲什麼你打開另一個問題,問題是一樣的在http://stackoverflow.com/questions/24857763/testing-a-post-using-phpunit-in-laravel-4/24857916#24857916 – Klemen
是的我澄清說,在我的答案當然是我得到一個錯誤。我的問題是,我如何實際做一個測試,通過示例輸入來檢查store()是否正在做它應該做的事情。 – sfas
我打開了另一個問題,因爲這個問題在我正在尋找的過程中有點特別。另一個問題似乎有點草率。 – sfas