我正在尝试为我的Ember应用程序执行集成/验收测试。我专门测试用户身份验证(例如,提交登录表单)和需要经过身份验证的受保护页面/状态。
关于我的应用程序的一般说明:
- 使用Ember应用套件
- 使用ember简单身份验证进行身份验证
- 我有我的ember简单身份验证表单的api存根,可以使用Devise授权器进行处理。在浏览器中运行应用程序时,这些功能可以正常工作
我有三个问题:
1.设计验证器&短期存储
从member-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存根&Testem
EAK的api存根似乎不可用于Testem,因此当通过命令行/Testem运行时,这些验收测试中的"登录"过程失败。
我尝试设置sinon.js,但上述问题使我无法决定它是否真的正常工作。使用ember-simple-auth成功存根登录用户的最佳方法是什么?是否可以将EAK的api存根用于Testem?
上面设置您引用的临时存储的示例已经过时了(如果您使用它,它基本上没有效果,将默认为localStorage存储)-对于新的API,请参阅这里的API文档:http://ember-simple-auth.simplabs.com/ember-simple-auth-api-docs.html#Ember-SimpleAuth设置。
也许解决这个问题也解决了你的第二个问题(也许登录表单实际上没有在第二次测试中显示,因为用户在使用localStorage存储时仍然登录?)。
在@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存根&Testem
我在StackOverflow上发现其他人也面临类似的问题。他们的问题最终得到了回应/解决,这帮助我解决了自己的问题。在这个GH问题的评论中,有一个链接到这个问题的解决方案。此处为示例。