我总是写这样的余烬测试:
test('should add new post', function(assert) {
visit('/posts/new');
fillIn('input.title', 'My new post');
click('button.submit');
andThen(() => {
assert.equal(find('ul.posts li:first').text(), 'My new post')
});
click('button.edit');
fillIn('input.title', 'My edited post');
click('button.submit');
andThen(() => {
assert.equal(find('ul.posts li:first').text(), 'My edited post')
});
});
但我也看到了测试和#34;嵌套"这样的风格:
test('should add new post', function(assert) {
visit('/posts/new');
fillIn('input.title', 'My new post');
click('button.submit');
andThen(() => {
assert.equal(find('ul.posts li:first').text(), 'My new post')
click('button.edit');
fillIn('input.title', 'My edited post');
click('button.submit');
andThen(() => {
assert.equal(find('ul.posts li:first').text(), 'My edited post')
});
});
});
一种方式比另一方更好还是正确?第一种风格可能成为竞争条件的来源吗?
我在github上查找了一些开源的ember应用程序,并且看到他们中的大多数都是这样做的:
https://github.com/cowbell/splittypie/blob/master/tests/acceptance/event-test.js
这是一个嵌套的例子:
https://github.com/HospitalRun/hospitalrun-frontend/blob/master/tests/acceptance/admin-test.js
答案 0 :(得分:0)
您要嵌套的一些原因是
我个人更喜欢与Date Time Caller Name Caller Number Call Duration
9/2/2015 4:03:18 PM John Smith (555) 444-1115 0:04:38
9/2/2015 10:53:09 AM Thomas Bush (555) 444-1115 N/A
9/2/2015 10:26:28 AM Burt Fenimore (555) 444-1115 0:05:53
例如:
assert.async()
根据我的个人经验,然后并不总是按预期发生,特别是如果你的开发代码中有一个计时器,那么使用done确保我的所有测试都成功并按顺序完成
答案 1 :(得分:0)
使用andThen
嵌套是没有充分理由的,尤其是现在您可以在Ember中使用async
/ await
。第二个例子可以改写:
test('should add new post', async function(assert) {
await visit('/posts/new');
fillIn('input.title', 'My new post');
await click('button.submit');
assert.equal(find('ul.posts li:first').text(), 'My new post')
await click('button.edit');
fillIn('input.title', 'My edited post');
await click('button.submit');
assert.equal(find('ul.posts li:first').text(), 'My edited post')
});