Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/470.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Ember.js:执行验收测试时组件属性消失_Javascript_Ember.js_Acceptance Testing_Ember Testing - Fatal编程技术网

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

Javascript Ember.js:执行验收测试时组件属性消失,javascript,ember.js,acceptance-testing,ember-testing,Javascript,Ember.js,Acceptance Testing,Ember Testing,我有一个组件列表表,它包含许多属性,如下所示: {{listing-table model=model.devices type='user' exclude='customerName'}} 这是预期的,集成测试也可以正常工作。但是,我的验收测试失败,因为在运行验收测试时,显然没有考虑排除属性 我已经通过打印来控制this.get'exclude'在组件的javascript文件中的值并得到未定义的值来测试了这一点。然而,打印例如this.get'type'会产生预期的结果 然后,出于测试目

我有一个组件列表表,它包含许多属性,如下所示:

{{listing-table model=model.devices type='user' exclude='customerName'}}
这是预期的,集成测试也可以正常工作。但是,我的验收测试失败,因为在运行验收测试时,显然没有考虑排除属性

我已经通过打印来控制this.get'exclude'在组件的javascript文件中的值并得到未定义的值来测试了这一点。然而,打印例如this.get'type'会产生预期的结果

然后,出于测试目的,我删除了exclude并用它替换了type的值,即type='endpointName,typeName',但是,我会在控制台中得到前面的值,例如user

这完全不是令人费解的,我真的很想知道验收测试出了什么问题。欢迎您提供任何提示,谢谢您的时间

编辑:

我现在编辑了我的验收测试,以排除通过单击各种元素来访问包含列表组件的路由:

发件人:

致:

测试通过了。我仍然不明白为什么点击会使我的组件的属性消失,而直接访问页面就可以了

编辑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文件基本上是在init函数中使用这个.get'exclude'来处理排除,但是正如我所说的,如果我在该文件中添加一个console.logthis.get'exclude',我就没有定义

编辑3:

经过更多的测试,我取得了一些进展,产生的问题需要有自己的页面。

只需几点思考:

我想这一次是在你第二次尝试时变绿的时候做的。。。您是否使用和来处理断言以确保所有异步事件都已解决? 模型挂钩是否被触发?根据您进入路线的方式,模型挂钩有时不会触发:
有一些代码可以查看可能会有帮助。

谢谢您的反馈!1.是的,我正在使用和;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')
  })
{{listing-table model=model.devices type='user' exclude='customerName'}}