2016-11-30 20 views
1

在我正在使用的應用程序中,我們有一個驗證用戶電子郵件地址的GET路由。如果電子郵件是無效的,服務器響應:ember-cli-mirage錯誤:沒有任何處理程序返回,但處理程序存在

  • 一個200狀態代碼
  • 響應與Content-Type:application/json; charset=utf-8
  • 頭和響應數據本身只是一個字符串「這封電子郵件是無效的」

我想通過做模擬這種在ember-cli-mirage

this.get('/ember_api/v1/validations/validate_email', function() { 
    return [200, { 'Content-Type': 'application/json' }, "This email is invalid"]; 

    // also tried this: 
    // return new Mirage.Response(200, { 'Content-Type': 'application/json' }, JSON.stringify({"message":"This email is invalid"})); 

    // and tried this: 
    // return "This email is invalid"; 
}); 

測試本身就是點擊一個按鈕將觸發關閉這個請求:

GET "/ember_api/v1/validations/validate_email?email=fakey%40fakefakefake.com&skip_uniq=true" 

...和我得到的錯誤是:

Pretender intercepted GET /ember_api/v1/validations/validate_email?email=tom%40gmail.com&skip_uniq=true but encountered an error: Nothing returned by handler for /ember_api/v1/validations/validate_email?email=tom%40gmail.com&skip_uniq=true. Remember to return [status, headers, body]; in your route handler.`

它要求我return [status, headers, body],但我在我的處理程序中這樣做,它仍然會拋出錯誤。

這實際上是響應的問題嗎?我是否需要編輯我的API以實際返回JSON API格式的對象,以便我可以用這種方式編寫測試?

我覺得我應該可以在我的測試中返回一個字符串,因爲這是應用程序正在做的事情。任何幫助表示讚賞。

回答

0

您正在使用的this.get是Mirage版本。您也可以使用this.pretender.get這應該與您當前的代碼示例...

+0

這工作,這對我來說很奇怪。如果我已經安裝了'ember-cli-mirage',那麼不應該使用「Mirage版本」?爲什麼我需要做'this.pretender.get'?在幻影文檔中我沒有看到任何引用此方法的東西。 [doc here](http://www.ember-cli-mirage.com/docs/v0.1.x/acceptance-testing/)中的最後一個示例顯示了使用'server.put'替代' server.pretender.put' –

+0

@TomNetzband Mirage用它自己的附加簡化圖層包裝僞裝者(這就是爲什麼你最初的方法不能工作,因爲你在說「僞裝者」而不是「幻影」,但它允許你向下移動如果需要,可以使用圖層並使用僞裝(http://www.ember-cli-mirage.com/docs/v0.2.x/configuration/#pretender) – acorncom

相關問題