使用jquery mockjax进行ember-simple-auth qunit测试

时间:2013-12-22 14:56:08

标签: ember.js qunit mockjax

我在我的应用程序中使用ember-simple-auth。对于我的测试,我将QUnit与jquery-mockjax一起使用。但我没有接受我的测试,login with correct credentials,以模拟回应。如果我没有嘲笑,下面的测试就可以了。模拟的响应看起来就像是服务器响应。

我的问题是,如何模仿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之后,显示问题:http://jsbin.com/ASaSaRiX/6/edit

3 个答案:

答案 0 :(得分:1)

我是Ember.SimpleAuth的作者。

您是否将Ember.SimpleAuth配置为使用'/ oauth / token'作为令牌端点?否则它将使用'/ token'作为服务器端点,因此你的模拟不会有任何影响。

答案 1 :(得分:1)

您在第一个代码块中的缩进似乎不正确。它应如下所示:(注意mock_http行的缩进变化)

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')

答案 2 :(得分:0)

问题是由jQuery版本与mockjax冲突引起的。在marcoow的帮助下,我找到了stackoverflow question。使用jQuery< 1.10它有效。嗯......那不太好。

顺便说一句工作的jsBin:http://jsbin.com/ASaSaRiX/11

修改 您可以找到更详细的信息here。问题是由jQuery中的更改引起的。

@marcoow:一个解决方法是将dataType: 'json'添加到Ember.SimpleAuth的请求选项中。也许您有时间查看上面链接中给出的信息。