Ember.js 使用jquerymockjax进行ember简单身份验证qunit测试

Ember.js 使用jquerymockjax进行ember简单身份验证qunit测试,ember.js,qunit,mockjax,Ember.js,Qunit,Mockjax,我在应用程序中使用。对于我的测试,我使用QUnit和。但是我没有得到我的测试,使用正确的凭证登录,来处理模拟响应。如果我没有嘲笑,下面的测试就可以了。模拟响应看起来与服务器响应完全相同 我的问题是,我应该如何模仿ember simple auth的响应 test "with correct credentials", -> expect(2) response = access_token : "92d50f562503e40fe783c2ebf359e0c2b37fa

我在应用程序中使用。对于我的测试,我使用QUnit和。但是我没有得到我的测试,
使用正确的凭证登录
,来处理模拟响应。如果我没有嘲笑,下面的测试就可以了。模拟响应看起来与服务器响应完全相同

我的问题是,我应该如何模仿ember simple auth的响应

test "with correct credentials", ->
  expect(2)

  response = 
    access_token : "92d50f562503e40fe783c2ebf359e0c2b37fa80758e2e3603d7e3e82a485522a"
    expires_in : 7200
    token_type : "bearer"

  # if I remove the following line, the test works
  mock_http('/oauth/token', response, 200)

  visit("login")
  .fillIn('#identification', 'test@test.de')
  .fillIn('#password', 'tester')
  .click('.btn-success').then ->
    ok(find("a:contains('Logout')").length, 'logout link not visible')
      ok(not find("a:contains('Login')").length, 'login link still visible')
以下测试也适用于模拟:

test "with wrong credentials", ->
  expect(2)

  response = 
    error : 'some error occured'

  mock_http('/oauth/token', response, 401)

  visit("login")
  .fillIn('#identification', 'test')
  .fillIn('#password', 'wrong')
  .click('.btn-success').then ->
    ok(not find("a:contains('Logout')").length, 'logout link not visible')
    ok(find("a:contains('Login')").length, 'login link still visible')
编辑:


下面是一个jsBin,它显示了问题:

我是Ember.SimpleAuth的作者


您是否将Ember.SimpleAuth配置为使用“/oauth/token”作为令牌端点?否则它将使用“/token”作为服务器端点,这样模拟就不会产生任何效果。

您在第一个代码块中的索引似乎不正确。它应该是这样读的:(注意
mock\uhttp
行的缩进变化)


这个问题是由jQuery版本与mockjax冲突引起的。在Marcow的帮助下我找到了这个。jQuery<1.10时,它可以工作。嗯。。。那不好

顺便说一下,一个正在工作的jsBin:

编辑: 您可以找到更详细的信息。该问题是由jQuery中的更改引起的


@Marcow:一个修复方法是在Ember.SimpleAuth的请求选项中添加
数据类型:“json”
。也许您有时间查看上面链接中给出的信息。

您会得到什么错误?没有错误,它什么也不做。它保持在
未登录
状态,因此测试未通过。也许这很重要,我的自建用户注册表可以很好地进行模拟。是的,我这样做了,因为我在服务器端使用Doorkeeper,它也使用/oauth/token端点。如果不模仿我的问题中描述的测试工作,你能不能在github上发布一个示例应用程序来说明问题(我想你的项目不是开源的)?。如果没有访问某个东西的权限,这实际上说明了问题所在,很难想出主意。问题是来自服务器(实际上是mockjax)的响应在AJAX完成处理程序中没有定义。Ember.SimpleAuth在检索访问令牌时执行此操作:Ember.$.ajax(Ember.SimpleAuth.serverTokenEndpoint,requestOptions)。然后(函数(响应){…})响应未定义,因此会话实际上未设置。我想一定与mockjax有关。对不起,我在写问题时出现了缩进错误。我已经编辑了我的问题,现在它应该与我的真实代码相同。感谢您的帮助。看起来添加
数据类型
是有意义的。我会调查的。
test "with correct credentials", ->
  expect(2)

  response = 
    access_token : "92d50f562503e40fe783c2ebf359e0c2b37fa80758e2e3603d7e3e82a485522a"
    expires_in : 7200
    token_type : "bearer"

  # if I remove the following line, the test works
  mock_http('/oauth/token', response, 200)

  visit("login")
  fillIn('#identification', 'test@test.de')
  fillIn('#password', 'tester')
  click('.btn-success').then ->
    ok(find("a:contains('Logout')").length, 'logout link not visible')
    ok(not find("a:contains('Login')").length, 'login link still visible')