【问题标题】:@wdio/sync: TypeError: hook.apply is not a function@wdio/sync:TypeError:hook.apply 不是函数
【发布时间】:2021-05-02 12:05:02
【问题描述】:

我正在使用带有 typescript 和 Jasmine 的 webdriverIO 6,最近(在将 @wdio/sync 升级到 6.10.11 之后,我不确定这是否是巧合)我注意到我已经在测试运行期间出现了一些新错误 - 在每个“it”之前和之后:

Starting ChromeDriver 88.0.4324.96 on port 9515
Only local connections are allowed.
Please see https://chromedriver.chromium.org/security-considerations for suggestions on keeping ChromeDriver safe.
ChromeDriver was started successfully.
[0-0] RUNNING in chrome - /dist/specs/main.spec.js
[0-0] 2021-01-28T14:28:25.059Z ERROR @wdio/sync: TypeError: hook.apply is not a function
    at execHook (/Users/marian/projects/***e2e/node_modules/@wdio/sync/build/executeHooksWithArgs.js:21:31)
[0-0] Error in "BeforeTest Hook"
hook.apply is not a function
[0-0] Opened url: ***
[0-0] 2021-01-28T14:28:28.826Z ERROR @wdio/sync: TypeError: hook.apply is not a function
    at execHook (/Users/marian/projects/-e2e/node_modules/@wdio/sync/build/executeHooksWithArgs.js:21:31)
[0-0] Error in "AfterTest Hook"
hook.apply is not a function

wdio/sync 升级到 6.11.00 后还是这样。

这是我的堆栈:

  "devDependencies": {
    "@types/jasmine": "^3.6.2",
    "@types/node": "^14.14.20",
    "@typescript-eslint/eslint-plugin": "^4.12.0",
    "@typescript-eslint/parser": "^4.12.0",
    "@wdio/cli": "^6.11.3",
    "@wdio/devtools-service": "^6.11.0",
    "@wdio/jasmine-framework": "6.6.3",
    "@wdio/local-runner": "^6.11.3",
    "@wdio/spec-reporter": "^6.11.0",
    "@wdio/sync": "6.11.0",
    "eslint": "^7.17.0",
    "eslint-config-standard": "^16.0.2",
    "eslint-plugin-import": "^2.22.1",
    "eslint-plugin-node": "^11.1.0",
    "eslint-plugin-promise": "^4.2.1",
    "wdio-chromedriver-service": "^6.0.4"
  },
  "dependencies": {
    "@rpii/wdio-html-reporter": "~6.1.1",
    "@slack/web-api": "^5.15.0",
    "@wdio/reporter": "^6.11.0",
    "chromedriver": "^88.0.0",
    "typescript": "4.1.3",
    "wdio-timeline-reporter": "^5.1.4"
  }

在 wdio.conf.js 中,我只使用了一个钩子,这不是导致问题的原因,因为它最后只被触发一次 (onComplete()) 并且评论它没有任何区别。

我还使用了扩展 WDIOreporter 的 CustomReporter 并在那里使用 onTestPass() 和 onTestFail() 方法,但即使禁用整个报告器也没有任何区别。

我查看了 executeHooksWithArgs.js:21:31 但这对我没有任何意义,除了这部分负责钩子。

我尝试回到@wdio/sync 6.6.0(我在升级之前使用的)失败了,在同一个文件中出现了类似的错误:

ERROR @wdio/local-runner: Failed launching test session: TypeError: hooks.map is not a function
    at Object.executeHooksWithArgs (/Users/marian/projects/***/node_modules/@wdio/sync/build/executeHooksWithArgs.js:16:19)
(...) Error: Could not find job

困扰我的是我有另一个项目具有类似的设置并且没有错误,我正在同时升级它们。我什至不知道该往哪里看。

【问题讨论】:

    标签: typescript jasmine automated-tests webdriver-io wdio-v6


    【解决方案1】:

    所以在我发送这个之前,我深入研究了这个项目的 gitlab 历史以及我在上一段中提到的类似项目,我注意到了一个区别:

    -    "@wdio/jasmine-framework": "6.6.3",
    +    "@wdio/jasmine-framework": "^6.11.0",
    

    升级后,问题就消失了。我希望我能写更多关于原因的内容,但老实说,我不知道到底是什么原因造成的。

    我知道如果你有类似的问题尝试升级你的框架,它适用于 Jasmine,我不确定 Mocha 或 Cucumber 是否有类似的问题,但如果是 - 值得一试。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-20
      • 1970-01-01
      • 1970-01-01
      • 2017-05-06
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 2022-09-23
      相关资源
      最近更新 更多