我们正在学习 Ember.js。我们做所有的开发 TDD,并且希望 Ember.js 也不例外。我们有构建测试驱动的 Backbone.js 应用程序的经验,因此我们熟悉使用 Jasmine 或 Mocha/Chai 测试前端代码。
在弄清楚如何测试视图时,当视图使用的模板有#linkTo
语句时,我们遇到了问题。不幸的是,我们无法找到好的测试示例和实践。这个要点是我们寻求如何体面地对 ember 应用程序进行单元测试的答案。
在查看Ember.js 源代码中的 linkTo 测试时,我们注意到它包含要支持的 ember 应用程序的完整连接#linkTo
。这是否意味着我们在测试模板时不能存根这种行为?
如何使用模板渲染为 ember 视图创建测试?
这是我们的测试的要点和使测试通过的模板,以及使测试失败的模板。
view_spec.js.coffee
# This test is made with Mocha / Chai,
# With the chai-jquery and chai-changes extensions
describe 'TodoItemsView', ->
beforeEach ->
testSerializer = DS.JSONSerializer.create
primaryKey: -> 'id'
TestAdapter = DS.Adapter.extend
serializer: testSerializer
TestStore = DS.Store.extend
revision: 11
adapter: TestAdapter.create()
TodoItem = DS.Model.extend
title: DS.attr('string')
store = TestStore.create()
@todoItem = store.createRecord TodoItem
title: 'Do something'
@controller = Em.ArrayController.create
content: []
@view = Em.View.create
templateName: 'working_template'
controller: @controller
@controller.pushObject @todoItem
afterEach ->
@view.destroy()
@controller.destroy()
@todoItem.destroy()
describe 'amount of todos', ->
beforeEach ->
# $('#konacha') is a div that gets cleaned between each test
Em.run => @view.appendTo '#konacha'
it 'is shown', ->
$('#konacha .todos-count').should.have.text '1 things to do'
it 'is livebound', ->
expect(=> $('#konacha .todos-count').text()).to.change.from('1 things to do').to('2 things to do').when =>
Em.run =>
extraTodoItem = store.createRecord TodoItem,
title: 'Moar todo'
@controller.pushObject extraTodoItem
broken_template.handlebars
<div class="todos-count"><span class="todos">{{length}}</span> things to do</div>
{{#linkTo "index"}}Home{{/linkTo}}
working_template.handlebars
<div class="todos-count"><span class="todos">{{length}}</span> things to do</div>