【问题标题】:Testing ember-simple-auth within Ember App Kit在 Ember App Kit 中测试 ember-simple-auth
【发布时间】:2014-04-16 23:45:07
【问题描述】:

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

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

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

我有三个问题:

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

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

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

2。多重验收测试

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

集成测试 #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?

【问题讨论】:

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


    【解决方案1】:

    设置您在上面引用的临时存储的示例已过时(如果您使用它,它基本上没有效果,并且默认为 localStorage 存储) - 对于新 API,请参阅此处的 API 文档:@987654321 @。

    也许修复这也解决了您的第二个问题(也许登录表单实际上并未显示在第二个测试中,因为您使用 localStorage 存储时用户仍处于登录状态?)。

    【讨论】:

    • 谢谢。使用更新的 API storeFactory 选项修复 #1。但是,它还没有修复 #2。表格肯定会显示出来。无限循环在表单提交后立即开始。有什么指导吗?我可以开始逐步检查 ember-simple-auth 库的哪一部分?
    • 我已经能够发现“无限循环”与登录表单实际上提交(好像没有 JS 预防)并刷新第二次登录测试页面。我不知道为什么。为了进一步调试,我将authenticate 操作更改为在按钮单击而不是表单提交时触发,但现在测试在每次运行时都会翻转。我还是不知道为什么。
    • Welp,经过 3 天的处理,我终于找到了问题所在。图书馆fastclick 是罪魁祸首。我还没有详细了解原因,但是在测试解决问题 #2 时从页面中删除 fastclick。感谢您的帮助。回想起来,我应该发布三个单独的问题,以便我可以选择您的回答作为#1 的答案。
    【解决方案2】:

    在@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 & Testem

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多