如何解决通过匿名自执行函数调用 Testcafe 't' 处理程序
我有一个案例,我想使用 t
函数外部可用的 t.ctx
上下文调用 test()
测试处理程序。这可能吗?从我运行此脚本时看到的情况来看,我确实看到控制台向我吐出所有可用的处理程序选项,但是尝试创建一个空的用户表单 t.ctx.userForm = {}
会引发错误:
Cannot implicitly resolve the test run in the context of which the test controller action should be executed. Use test function's 't' argument instead.
import { t } from 'testcafe';
const setFormContext = (t) => {
console.log(t);
t.ctx.userForm = {};
};
export const intializeEmptyForm = (async(t) => {
await setFormContext(t)
})(t);
我基本上希望能够拥有这样的代码,但不会使用与页面上的内容无关的自定义函数过度膨胀 POM AccountPage 对象,或者依赖于调用 firstName
之类的东西来使t.ctx.userForm
可用。
export const AccountPage = {
enterFirstName: async (firstName) => {
let firstNameField = Selector('#firstName');
await t.typeText(firstNameField,firstName);
// t.ctx.userForm = {}; <- ideally not here as it's tied to enterFirstName
t.ctx.userForm.firstName = firstName;
},enterLastName: async (lastName) => {
let lastNameField = Selector('#lastName');
await t.typeText(lastNameField,lastName);
t.ctx.userForm.lastName = lastName;
}
// ... some logic that maps t.ctx.userForm values to an assertion that checks all form values after clicking 'Save' are actually present.
}
import { AccountPage } from 'AccountPage';
...
test('User form successfully saves and updates correctly',async () => {
await AccountPage.enterFirstName('First');
await AccountPage.enterLastName('Last');
await AccountPage.clickSave()
})
解决方法
final_time - initial_time
语句在调用堆栈中查找 import {t} from 'testcafe'
、test()
、beforeEach()
或其他测试函数,并从其参数中获取 afterEach()
实例.当在不是从测试或钩子调用的函数中使用导入的 t
时,会发生此错误。这就是您的情况,因为在 t
中导出承诺的箭头函数是自调用的。
作为一种解决方案,您可以在 initializeEmptyForm
中导出一个函数(不是承诺)并从测试上下文中调用它。
helper.js
initializeEmptyForm
test.js
import { t } from 'testcafe';
export const initializeEmptyForm = async () => {
await setFormContext(t);
};
或者,您可以导出一个以 import { initializeEmptyForm } from './helper.js';
fixture 'fixture 1'
.beforeEach(async t => {
await initializeEmptyForm();
});
test('test 1',async t => {
// ...
});
作为参数的函数:
helper.js
t
test.js
export const initializeEmptyForm = async t => {
await setFormContext(t);
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。