2015-09-06 89 views
0

我想使用Symfony2和FOSRestBundle建立一個API的POST。以下功能測試返回OK。POST JSON返回400捲曲,但功能測試工作

public function testPostArticleAction(){ 

     $this->client->request(
       'POST', 
       '/api/v1/articles.json', 
       array(), 
       array(), 
       array('CONTENT_TYPE' => 'application/json'), 
       '{"articleContent":"The content of the content"}' 
       ); 
     $response = $this->client->getResponse(); 

     $this->assertJsonResponse($response,201, false); 
    } 

但是,當我嘗試通過捲曲發送請求以相同的請求主體,它給了我一個400的無效JSON消息:

{「代碼」:400,「消息」:」無效JSON消息中接收 「}

下面是我曾嘗試捲曲命令:

捲曲-X POST -d「{ 」articleContent「:」 標題1" }」 http://localhost:8000/api/v1/articles --header 「內容類型:application/JSON」

捲曲-X POST -d '{ 「articleContent」: 「TITLE1」}' http://localhost:8000/api/v1/articles.json

請到注意,GET返回我JSON,如:

{ 「ID」:68, 「article_content」: 「內容的內容」}

但我的領域是articleContent在我的教條映射文件。我錯過了什麼? 非常感謝您的幫助。

回答

1

嘗試更新你的頭選項:

"Content-Type: application/json" 

此外 - 這是否要求進行任何類型的認證?如果需要的話,你需要傳遞一個auth cookie。

+0

我用Content-Type無效。另外,當我刪除它時,我現在得到一個SQL完整性約束違規錯誤(不能將null填充到列)。然後我沒有認證,(很明顯,因爲我甚至可以到達數據庫層)。我的腦袋是acking,非常感謝你的時間 –

+0

好吧,聽起來你需要通過一些額外的輸入字段。你能看到表格的結構嗎?這可能會給你一些線索。此外,單元測試套件通常會針對測試數據庫運行,該測試數據庫的架構可能不會與curl請求所擊中的數據庫(如果確實存在單獨的數據庫)保持同步。 – curtis1000

+0

實際上,該表是一個帶有'articleContent'作爲列名稱(在phpmyadmin中)的單列表。它也是在doctrine orm文件中的同名。我在深入挖掘你的意見,以檢查更多可能的原因(因爲文檔也指向一些近期問題http://welcometothebundle.com/web-api-rest-with-symfony2-the-best-way-the-post-方法/#這個名稱的表單類型)。再次感謝 –