Ember.js 使用jquerymockjax进行ember简单身份验证qunit测试
我在应用程序中使用。对于我的测试,我使用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
使用正确的凭证登录
,来处理模拟响应。如果我没有嘲笑,下面的测试就可以了。模拟响应看起来与服务器响应完全相同
我的问题是,我应该如何模仿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')