验收测试
编辑教程验收测试
使用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) 用执行成功的promise值填充到选中的input元素上。使用<code><select>作为</select><input></code>时,记得<code><select>元素的value是标签所指定的值,并不是标签显示的内容。
选择支付方式:
备注:
转账时请填写正确的金额和备注信息,到账由人工处理,可能需要较长时间