使用ember generate acceptance-test
创建一个验收测试,比如:
ember g acceptance-test login
执行完毕命令之后得到如下文件内容:
//tests/acceptance/login-test.js
import { test } from 'qunit';
import moduleForAcceptance from 'people/tests/helpers/module-for-acceptance';
moduleForAcceptance('Acceptance | login');
test('visting /login', function(assert) {
visit('/login');
andThen(function() {
assert.equal(currentURL(), '/login');
});
});
moduleForAcceptance
用来启动、终止程序。最后几行test
中包含了一个示例。
几乎所有的测试都有一个路由请求,用于和页面交互(通过helper)并检查DOM是否按照期望值进行改变。
举个例子:
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'));
});
大体意思为:
进入路由/posts/new
,在输入框input.title
填入My new post
,点击button.submit
,期望的结果是: 在对应列表下ul.posts li.first
的文本为My new post
.
在测试web应用中的一个主要的问题是,由于代码都是基于事件驱动的,因此他们有可能是异步
的,会使代码无序
运行。
比如有两个按钮,从不同的服务器载入数据,我们先后点击他们,但可能结果返回的顺序并不是我们点击的顺序。
当你在编写测试的时候,你需要特别注意一个问题,就是你无法确定在发出一个请求后,是否会立刻得到返回的响应。因此,你的断言需要以同步的状态来等待被测试体。例如上面所举的例子,应该等待两个服务器均返回数据后,这时测试代码才会执行其逻辑来检测数据的正确性。
这就是为什么在做断言的时候,Ember测试助手都是被包裹在一个确保同步状态的代码中。这样做避免了对所有这样的代码都去做这样的包裹,并且因为减少了模板代码,从而提高了代码的可读性.
Ember包含多个测试助来辅助进行验收测试。一共有2种类型:异步助手asynchronous
和同步助手synchronous
异步测试助手可以意识到程序中的异步行为,使你可以更方便的编写确切的测试。
同时,这些测试助手会按注册的顺序执行,并且是链式运行。每个测试助手的调用都是在前一个调用结束之后,才会执行下一个。因此,你可以不用当心测试助手的执行顺序。
click(selector)
click
事件,返回一个异步执行成功的promise
。fillIn(selector, value)
时,记得内容错误
- 更新不及时
- 链接错误
- 缺少代码/图片示列
- 太简单/步骤待完善
- 其他
更多建议: