我遇到了从另一个助手调用助手的问题。 这可能是我对概念的误解,但我没有在文档中找到任何答案。
在我的项目中,我经常使用助手。其中一些非常简单,可以帮助我完成诸如从自定义选择 ui 元素中选择项目之类的事情。其他的要大得多 - 例如,我有一个助手可以创建整个课程实体(对于特定的测试场景,我需要一些具有不同数据的课程)。
问题是当我直接从场景中调用我的助手时,我可以在其中使用 Puppeteer,但是当我从另一个助手调用助手时 - 无法使用 Puppeteer,因为 this
变量返回 undefined
,所以我不能调用 this.helpers.Puppeteer
。
这是简化的代码。
两个助手声明:
exports.config = {
helpers: {
Puppeteer: { /* some config */ },
SelectFromListHelper: {
require: './selectFromList_helper.js' // <- this one is "simple" helper
},
CreateLessonHelper: {
require: './createLesson_helper.js' // <- this one is "big one" - has to be working with other helerps
}
},
bootstrap: null
}
SelectFromListHelper:
class SelectFromListHelper extends Helper {
async selectFromList (selector, listItemNumber = 1) {
// const page = this.helpers['Puppeteer'].page
// await page.click('#list')
console.log(this)
}
}
创建课程助手:
class CreateLessonHelper extends Helper {
async createLesson () {
const page = this.helpers['Puppeteer'].page
// await page.click('#assistants')
const { selectFromList } = this.helpers.SelectFromListHelper
await selectFromList('#teachers', 2)
}
}
场景:
Feature('Feature 1')
Scenario('Test 1', async ({ I}) => {
// calling for SelectFromListHelper.selectFromList
// it works fine, puppeteer is accessible from that function. (console.log returns helper object)
await I.selectFromList('#assistants', 1)
// calling for CreateLessonHelper.createLesson
await I.createLesson()
// and here the problem starts.
// Inside of createLesson I do call this.helpers.SelectFromListHelper.selectFromList()
// and from that call i can't access the Puppeteer. Console.log returns "undefined"
})
如果我在 selectFromList 方法中删除 console.log
并取消注释 Puppeteer 调用,我会收到以下反馈:
--verbose
CodeceptJS v3.0.4
Using test root "C:\Work\london-smp-tests"
Helpers: Puppeteer, SelectFromListHelper, CreateLessonHelper
Plugins: screenshotOnFail
Feature 1 --
[1] Starting recording promises
» [Session] Starting singleton browser session
Test 1
I select from list "#assistants", 1
I create lesson
[1] Error | TypeError: Cannot read property 'helpers' of undefined
[1] Error | TypeError: Cannot read property 'helpers' of undefined
[1] Starting <teardown> session
[1] <teardown> Stopping recording promises
» <screenshotOnFail> Test failed, try to save a screenshot
» Screenshot is saving to C:\Work\london-smp-tests\output\Test_1.failed.png
× FAILED in 507ms
[2] Starting recording promises
-- FAILURES:
1) Feature 1
Test 1:
Cannot read property 'helpers' of undefined
at selectFromList (selectFromList_helper.js:5:23)
at CreateLessonHelper.createLesson (createLesson_helper.js:9:11)
at Step.run (node_modules\codeceptjs\lib\step.js:66:47)
at C:\Work\london-smp-tests\node_modules\codeceptjs\lib\actor.js:117:23
Scenario Steps:
- I.createLesson() at Test.<anonymous> (.\T1_test.js:5:13)
- I.selectFromList("#assistants", 1) at Test.<anonymous> (.\T1_test.js:4:13)
Artifacts:
- screenshot: C:\Work\london-smp-tests\output\Test_1.failed.png
FAIL | 0 passed, 1 failed // 1s
我在做什么/理解错了?