Angular Renderer invokeElementMethod在Jasmine中抛出对象ErrorEvent

时间:2018-04-11 12:46:40

标签: angular karma-jasmine

我需要聚焦一个输入元素,并在点击另一个元素时选择所有文本。为此,我使用@ViewChild获取input元素并将其传递给renderer invokeElementMethod。

组件中的代码如下,

Unknown error checking for existence of class: com.fasterxml.jackson.databind.ObjectMapper
java.lang.NoClassDefFoundError: com/fasterxml/jackson/core/Versioned
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$100(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Unknown Source)
        at org.apache.logging.log4j.util.LoaderUtil.loadClass(LoaderUtil.java:141)
        at org.apache.logging.log4j.util.LoaderUtil.isClassAvailable(LoaderUtil.java:115)
        at org.apache.logging.log4j.core.util.Loader.isClassAvailable(Loader.java:310)
        at org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory.<init>(YamlConfigurationFactory.java:47)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at org.apache.logging.log4j.core.util.ReflectionUtil.instantiate(ReflectionUtil.java:188)
        at org.apache.logging.log4j.core.config.ConfigurationFactory.addFactory(ConfigurationFactory.java:190)
        at org.apache.logging.log4j.core.config.ConfigurationFactory.getInstance(ConfigurationFactory.java:164)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:613)
        at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:634)
        at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:229)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:152)
        at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
        at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getContext(AbstractLoggerAdapter.java:122)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getContext(Log4jLoggerFactory.java:43)
        at org.apache.logging.log4j.spi.AbstractLoggerAdapter.getLogger(AbstractLoggerAdapter.java:46)
        at org.apache.logging.slf4j.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:29)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:358)
        at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:383)
        at org.apache.jmeter.JMeter.<clinit>(JMeter.java:109)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
        at java.lang.reflect.Constructor.newInstance(Unknown Source)
        at java.lang.Class.newInstance(Unknown Source)
        at org.apache.jmeter.NewDriver.main(NewDriver.java:246)
Caused by: java.lang.ClassNotFoundException: com.fasterxml.jackson.core.Versioned
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 43 more

从组件级别开始,该功能运行良好。现在,当我尝试编写测试用例来执行执行上述代码的方法时,它会抛出

setTimeout(() => {
         this._renderer.invokeElementMethod(this.elAccountRename.nativeElement, 'select', []);
         this._renderer.invokeElementMethod(this.elAccountRename.nativeElement, 'focus', []);
      }, 0);

我的测试用例块如下,

[object ErrorEvent] thrown 

1 个答案:

答案 0 :(得分:0)

不确定是否完全适合您的问题,但是我遇到了一个类似的问题,茉莉花会引发超时错误:

[object ErrorEvent] thrown 

Timeout has occurred thrown 

在IDE输出中。

在我的情况下,该错误是由一个测试用例引起的,该用例异步调用了我忘记模拟的服务方法(并且在单元测试期间未能返回)。

相应的超时在jasmine.DEFAULT_TIMEOUT_INTERVAL ms之后引发。 Karma然后错误地将它们与当前正在执行的测试用例相关联,这通常是导致超时的测试用例之后的一个。这对我来说是非常误导的。

为了确定真正的根本原因测试用例,我编写了一个占位符测试用例:

it('just waits', (done) => {
  sleep(4000).then(() => { // sleept time needs to be lower than default timeout
    expect(true).toBe(true);
    done();
  })
});

我遍历了测试套件。根据放置位置的不同,您会看到不同的测试失败。当您看到差异时,便知道之前的测试用例存在问题。