在Ember App Kit中测试ember-simple-auth

时间:2014-04-16 23:45:07

标签: authentication ember.js ember-app-kit ember-qunit ember-simple-auth

我正在尝试为我的Ember应用程序执行集成/验收测试。我专门测试用户身份验证(例如 - 提交登录表单)和需要经过身份验证的用户的受保护页面/状态。

关于我的应用的一般说明:

  • 使用Ember App Kit
  • 使用ember-simple-auth进行身份验证
  • 我有api-stubs我的ember-simple-auth表单使用Devise授权程序命中。这些在浏览器中运行应用程序时工作正常。

我有三个问题:

1。设计认证器&短暂存储

从ember-simple-auth API,它指的是使用Ephemeral存储进行测试。我已经这样做了,much like this。但是,似乎会话仍然存储在本地存储中。如果我在每个测试设置中没有执行localStorage.clear() /拆卸测试失败,因为当每个测试在第一个测试之后运行时我仍然保持登录状态。

当我为我的应用程序使用Devise身份验证器时,我是否能够阻止在每次测试之间将会话存储在本地存储中?

2。多次验收测试

如果我尝试log in a user超过1 test(),我的测试会转变为无限循环。第一个测试将通过,但是当第二个测试提交登录表单时,整个测试套件将停止并重新启动。

整合测试#1

App = null

module('Acceptance - Page #1',
  setup: ->
    App = startApp()

  teardown: ->
    Ember.run(App, 'destroy')
)

test('page #1 behind authentication', ->
  expect(1)

  visit('/page-1')
  fillIn('input#identification', 'foo@bar.com')
  fillIn('input#password', 'password')
  click('button[type="submit"]')
  andThen(->
    equal(true, true) # This test works fine
  )
)

整合测试#2

App = null

module('Acceptance - Page #2',
  setup: ->
    App = startApp()

  teardown: ->
    Ember.run(App, 'destroy')
)

test('page #2 behind authentication', ->
  expect(1)

  visit('/page-2')
  fillIn('input#identification', 'foo@bar.com')
  fillIn('input#password', 'password')
  click('button[type="submit"]')
  andThen(->
    equal(true, true) # Never runs, tests start over, infinite loop begins
  )
)

3。 EAK api-stubs& Testem

EAK's api-stubs似乎不适用于Testem,因此当通过命令行/ Testem运行时,这些验收测试中的“登录”过程失败。

我尝试setting up sinon.js,但上述问题阻止我决定它是否真的正常工作。使用ember-simple-auth成功存根用户的最佳方法是什么?是否可以将EAK的api-stub用于Testem?

2 个答案:

答案 0 :(得分:2)

设置您上面引用的临时商店的示例已过时(如果您使用它,它基本上没有效果,并默认为localStorage商店) - 对于新API,请参阅此处的API文档:{{ 3}}

也许修复它也修复了你的第二个问题(也许登录表单实际上并没有显示在第二个测试中,因为当你使用localStorage存储时,用户仍然仍然登录?)。

答案 1 :(得分:0)

在@marcoow和其他一些SO问题和GitHub问题的帮助下,我已经能够解决所有问题:

1。设计认证器&短暂存储

我在代码中使用了过时的API选项。更新以使用较新的API的storeFactory选项解决了我的会话localStorage问题。

#  app/initializers/simple-auth.coffee
if Ember.testing == true
  options = Ember.merge({ storeFactory: 'session-store:ephemeral' }, options)

2。多次验收测试

这与我加载的另一个名为fastclick的库有关。在更新我的索引文件以仅在非测试环境中加载此库之后,我的表单提交/无限循环问题就消失了。

// app/index.html
<!-- @if tests=false -->
  <script src="/vendor/emberjs-touch/lib/ember-fastclick.js"></script>
<!-- @endif -->

3。 EAK api-stubs&amp; Testem

我发现其他人面临similar issues to me on StackOverflow。他们的问题最终得到回应/解决,这有助于我解决自己的问题。在comments of this GH issue中,有一个解决此问题的链接。 Example here