2016-11-30 49 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