Ember.js:执行验收测试时消失的组件属性

时间:2017-08-10 20:07:40

标签: javascript ember.js acceptance-testing ember-testing

我有一个组件listing-table,它包含许多属性,如下所示:

{{listing-table model=model.devices type='user' exclude='customerName'}}

这可以按预期工作,集成测试也可以正常工作。但是,我的验收测试失败了,因为显然我的exclude属性在运行验收测试时没有被考虑在内。

我已经通过打印来控制组件的javascript文件中this.get('exclude')的值并获取undefined。但是,打印例如this.get('type')产生预期结果。

出于测试目的,我已经删除exclude并用type取代type='endpointName,typeName'的值,但是,我会在控制台中获取之前的值,例如user

这总是令人费解,我真的很想知道验收测试的问题。任何提示都非常受欢迎,谢谢你的时间!

编辑:

我现在已经编辑了我的验收测试,以排除点击各种元素以进入包含我的listing-table组件的路线:

自:

visit('/users/1')
click('a:contains("Devices")')

要:

visit('/users/1/devices')

测试通过。我仍然不明白为什么点击使我的组件的属性消失,而访问页面直接工作正常。

编辑2:

所以,这是一些示例代码。这就是我的测试结果:

test('/customers/1/devices should display 5 devices', function (assert) {
  let type = server.create('endpoint-type')
  let user = server.create('user')
  let endpoint = server.create('endpoint', { type })
  server.createList('device', 5, { user })

  visit('/customers');
  click('a:contains("Customer 0")')
  click('a:contains("Devices")')
  andThen(function () {
    assert.equal(find('.device-listing').length, 5, 'should see 5 listings')
    assert.equal(find('th').text().trim(), 'IDModelManufacturerMACExtensionLocation', 'should only contain ID, Model, Manufacturer, MAC, Extension, and Location columns')
  })

现在,在这种情况下,我的设备表应省略“客户”列,但是,该列确实出现在那里,即使devices.show.customers中的我的组件已被调用:

{{listing-table model=model.devices type='user' exclude='customerName'}}

我的listing-table.js文件基本上使用this.get('exclude')函数中的init ()来处理排除,但正如我所说,如果我在该文件中添加console.log(this.get('exclude'),我会得到undefined

编辑3:

经过更多测试后,我取得了一些进展,结果问题需要自己的页面here

1 个答案:

答案 0 :(得分:1)

只是一些想法:

  1. 我认为这个已经完成,因为你第二次尝试时变绿了......你是否正在使用andThen来处理你的断言以确保所有的异步事件都已解决?
  2. 模型挂钩是否被触发?根据您输入路线的方式,模型钩子有时不会被触发:Why isn't my ember.js route model being called?
  3. 可能需要查看一些代码。