规划你的应用
为了展示如何搭建Ember应用程序,我们将搭建一个资产租赁的应用,叫Super Rentals
。我们将开始于一个home页面,一个about页面和一个联系我们页面。 应用程序的构成是:
- 在home页面上显示租赁清单
- 链接到关于公司的页面
- 链接到“联系我们”的页面
- 列出有效的租赁清单
- 按城市过滤租赁清单
- 显示一个选中租赁的详细信息
上面列出了6个路由,在下文的验收测试中提到“应用目标”,就是指将这6个路由分别测试一遍。如果再加上根路由/
,则共有7个路由。
用We Go测试应用程序
验收测试与我们的应用程序进行交互,就像实际的人一样,但是是自动化的,有助于确保我们的应用程序在将来不会中断。
当我们使用Ember CLI创建一个新的Ember项目时,它使用 QUnit JavaScript 测试框架来定义和运行测试。
我们将首先使用Ember CLI生成新的验收测试:
$ ember g acceptance-test list-rentals
installing acceptance-test
create tests/acceptance/list-rentals-test.js
可以打开生成的tests/acceptance/list-rentals-test.js
的文件看看其内容。发现生成的测试代码的第一个测试是请求/list-rentals
路由。这时我们的应用还没有定义任何路由,所以可以把文件中的三个/list-rentals
都改成/
来测试应用的基础URLhttp://c7302.ambari.apache.org:4200/
。修改后的tests/acceptance/list-rentals-test.js
如下:
import { test } from 'qunit';
import moduleForAcceptance from 'super-rentals/tests/helpers/module-for-acceptance';
moduleForAcceptance('Acceptance | list rentals');
test('visiting /', function(assert) {
visit('/');
andThen(function() {
assert.equal(currentURL(), '/');
});
});
对于这个简单测试,需要注意的几点是:
- 验收测试通过调用函数
moduleForAcceptance
来建立,此函数确保您的Ember应用程序在每次测试之间启动和关闭。 - QUnit传到一个叫assert的对象到每个测试函数。assert含有函数,如equal(),允许检查测试环境中的条件。一个测试必须有一个通过断言才能成功。
- Ember验收试验使用一组测试助手函数,如visit,andThen和上面使用的currentURL函数。我们将在本教程的后面更详细地讨论这些功能。
现在启动测试:
$ ember test --server --host c7302.ambari.apache.org
默认情况下,当执行上述命令时,Ember CLI 会运行 Testem test runner, 它会在Chrome和 PhantomJS 中运行Qunit。
按屏幕的提示,让用浏览器访问地址 http://c7302.ambari.apache.org:7357/
。
浏览器上现在显示10次成功测试。如果取消选中Hide passed tests
,应该看到我们的验收测试成功,以及9次通过的 ESLint 测试。
添加应用的完整目标到验收测试
虽然现在只有一个根路由/
可以测试,但可以先创建完整的测试文件。编辑tests/acceptance/list-rentals-test.js
,如下列内容:
import { test } from 'qunit';
import moduleForAcceptance from 'super-rentals/tests/helpers/module-for-acceptance';
moduleForAcceptance('Acceptance | list-rentals');
test('should show rentals as the home page', function (assert) {
});
test('should link to information about the company.', function (assert) {
});
test('should link to contact information.', function (assert) {
});
test('should list available rentals.', function (assert) {
});
test('should filter the list of rentals by city.', function (assert) {
});
test('should show details for a selected rental', function (assert) {
});
test('visiting /', function(assert) {
visit('/');
andThen(function() {
assert.equal(currentURL(), '/');
});
});
然后运行 ember test --server
。则在linux屏幕上显示:
Chrome 61.0
1/7
而浏览器上显示:
7 tests completed in 18000 milliseconds, with 6 failed, 0 skipped, and 0 todo.
1 assertions of 7 passed, 6 failed.
这是因为除了根路由/
,其它路由还没有创建,所以测试出错。共7个测试,通过1个,失败了6个。