Ember.js setApplication中断ember qunit测试上下文

Ember.js setApplication中断ember qunit测试上下文,ember.js,qunit,ember-qunit,ember-octane,Ember.js,Qunit,Ember Qunit,Ember Octane,我最近将一个Ember应用程序从2.18升级到了3.13,进展顺利。今天我第一次尝试添加验收测试(在此之前只有集成/单元测试),但第一行测试失败: import { module, test } from "qunit"; import { visit, currentURL } from "@ember/test-helpers"; import { setupApplicationTest } from "ember-qunit"; module("Acceptance | some ro

我最近将一个Ember应用程序从2.18升级到了3.13,进展顺利。今天我第一次尝试添加验收测试(在此之前只有集成/单元测试),但第一行测试失败:

import { module, test } from "qunit";
import { visit, currentURL } from "@ember/test-helpers";
import { setupApplicationTest } from "ember-qunit";

module("Acceptance | some route", function(hooks) {
  setupApplicationTest(hooks);

  test("visiting /some-route", async function(assert) {
    await visit("/some-route"); // <----- error thrown here

    assert.equal(currentURL(), "/some-route");
  });
});
在上面的文件中,所有的测试都失败了,因此似乎是
setApplication
导致测试上下文设置不正确?旧的
test helper.js
文件如下:

import resolver from "./helpers/resolver";
import { setResolver } from "@ember/test-helpers";
import { start } from "ember-cli-qunit";

setResolver(resolver);
start();

我尝试重新添加
setResolver
调用,但没有任何区别。有没有其他人在使用新的ember-qunit语法时遇到这些问题,或者可能看到我做错了什么?此外,我还设置了
autoboot=false
environment.js
文件中,这没有什么区别。测试套件还有一个或两个仍然使用旧的ember-qunit语法编写的测试。任何帮助都将不胜感激

首先,一些背景故事:

我们的应用程序使用第三方库作为度量标准,使用另一个第三方库作为功能标志。每个库都有自己的服务,但我们需要先初始化metrics服务,然后才能初始化feature flag服务,因为我们希望链接分析用户数据,以便为每个用户获得正确的特性标志。功能标志检查在整个应用程序中都进行,因此在功能标志检查发生和分析文件加载到网页上的脚本标记之间会出现竞争条件

现在,解决方案是:

出现此错误的原因是:

Source:     
TypeError: Cannot read property 'lookup' of undefined
    at Object.initialize (http://localhost:4200/assets/my-app.js:10312:28)
    at http://localhost:4200/assets/vendor.js:61627:21
    at Vertices.each (http://localhost:4200/assets/vendor.js:80243:9)
    at Vertices.walk (http://localhost:4200/assets/vendor.js:80157:12)
    at DAG.each (http://localhost:4200/assets/vendor.js:80087:22)
    at DAG.topsort (http://localhost:4200/assets/vendor.js:80095:12)
    at Class._runInitializer (http://localhost:4200/assets/vendor.js:61653:13)
    at Class.runInitializers (http://localhost:4200/assets/vendor.js:61625:12)
    at Class._bootSync (http://localhost:4200/assets/vendor.js:59923:14)
    at Class.boot (http://localhost:4200/assets/vendor.js:59890:14)
是因为应用程序有一个应用程序初始值设定项,该初始值设定项使用私有的Ember API从容器中执行查找。初始值设定项在检索分析数据,然后初始化功能标志服务之前,正在执行查找以隐式初始化度量服务

export function initialize(application) {
  const container = application.__container__; // <-- undefined
  const lookup = container.lookup.bind(application.__container__); // <-- error!
  ...
}
导出函数初始化(应用程序){

const container=application.\uuuu container\uuu;//首先,一些背景故事:

我们的应用程序使用一个用于度量的第三方库和另一个用于功能标志的第三方库。每个库都有自己的服务,但我们需要在初始化功能标志服务之前初始化度量服务,因为我们希望链接分析用户数据以获得每个用户的正确功能标志延迟检查在整个应用程序中都会进行,因此在功能标志检查发生和分析文件加载到网页上的脚本标记之间会出现竞争条件

现在,解决方案是:

出现此错误的原因是:

Source:     
TypeError: Cannot read property 'lookup' of undefined
    at Object.initialize (http://localhost:4200/assets/my-app.js:10312:28)
    at http://localhost:4200/assets/vendor.js:61627:21
    at Vertices.each (http://localhost:4200/assets/vendor.js:80243:9)
    at Vertices.walk (http://localhost:4200/assets/vendor.js:80157:12)
    at DAG.each (http://localhost:4200/assets/vendor.js:80087:22)
    at DAG.topsort (http://localhost:4200/assets/vendor.js:80095:12)
    at Class._runInitializer (http://localhost:4200/assets/vendor.js:61653:13)
    at Class.runInitializers (http://localhost:4200/assets/vendor.js:61625:12)
    at Class._bootSync (http://localhost:4200/assets/vendor.js:59923:14)
    at Class.boot (http://localhost:4200/assets/vendor.js:59890:14)
是因为应用程序具有一个应用程序初始值设定项,该初始值设定项正在使用专用的Ember API从容器执行查找。该初始值设定项正在执行查找,以在检索分析数据之前隐式初始化度量值服务,然后初始化功能标志服务

export function initialize(application) {
  const container = application.__container__; // <-- undefined
  const lookup = container.lookup.bind(application.__container__); // <-- error!
  ...
}
导出函数初始化(应用程序){

const container=application.\uuuuu container\uuuu;//我猜您在从2.18升级到3.13的过程中忘记了什么。测试上下文应该由
setupApplicationTest(hooks)设置
在您的验收测试中。请参阅。您使用的是什么版本的
ember qunit
?我会根据默认蓝图仔细检查您的应用程序。您可以在repo上找到它。我会特别仔细检查您的
config/environment.js
、依赖项版本以及
测试/
文件夹中的所有文件。我会从在测试环境中验证
APP.autoboot
是否为
false
:@JulienPalmas我正在使用
ember-quonit
版本
4.5.1
。当在链接的行上暂停执行
时,这只不过是一个POJO,所以我猜有什么东西事先设置不正确?@jelhan我仔细检查了默认的blueprint和它看起来是一样的。对于
environment.js
文件,似乎没有什么不寻常的地方,我确实为测试环境将
APP.autoboot
设置为
false
。我猜您在从2.18升级到3.13的过程中忘记了什么。测试上下文应该由
setupApp设置牵引试验(吊钩)
在您的验收测试中。请参阅。您使用的是什么版本的
ember qunit
?我会根据默认蓝图仔细检查您的应用程序。您可以在repo上找到它。我会特别仔细检查您的
config/environment.js
、依赖项版本以及
测试/
文件夹中的所有文件。我会从在测试环境中验证
APP.autoboot
是否为
false
:@JulienPalmas我正在使用
ember-quonit
版本
4.5.1
。当在链接的行上暂停执行
时,这只不过是一个POJO,所以我猜有什么东西事先设置不正确?@jelhan我仔细检查了默认的blueprint和它看起来是一样的。对于
environment.js
文件,没有什么不寻常的地方,我确实为测试环境将
APP.autoboot
设置为
false