0

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

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

  • 使用Ember 应用套件
  • 使用ember-simple-auth进行身份验证
  • 我有api-stubs用于我的 ember-simple-auth 表单,可以使用 Devise 授权器进行访问。在浏览器中运行应用程序时,这些工作正常。

我有三个问题:

1. 设计身份验证器和临时存储

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

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

2. 多重验收测试

如果我尝试登录超过 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 的 api-stub似乎不适用于 Testem,因此当通过命令行/Testem 运行时,这些验收测试中的“登录”过程会失败。

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

4

2 回答 2

2

设置您在上面引用的临时存储的示例已过时(如果您使用它,它基本上没有效果,并且默认为 localStorage 存储) - 对于新 API,请参阅此处的 API 文档:http://ember -simple-auth.simplabs.com/ember-simple-auth-api-docs.html#Ember-SimpleAuth-setup

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

于 2014-04-17T07:02:12.003 回答
0

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

1. 设计身份验证器和临时存储

我在代码中使用了过时的 API 选项。更新以使用较新的 APIstoreFactory选项解决了我的会话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 & Testem

我在 StackOverflow 上发现其他人面临与我类似的问题。他们的问题最终得到了回应/解决,这帮助我解决了自己的问题。在这个 GH issue 的评论中,有一个指向这个问题的解决方法的链接。这里的例子

于 2014-04-17T23:30:39.300 回答