**我有一个集合,获取类UserInfo
,用于设置和获取变量。
我想从方法createNewUser()
设置这些变量,并返回UserInfo
对象。
当我试图返回对象时,总是给我空值。当我尝试从then块返回它时,该方法抱怨没有返回值。**
export default class UserInfo {
private accountId!: string;
private firstName!: string;
private lastName!: string;
constructor() {}
/**
* Gets Account Id
*/
public getAccountId(): string {
return this.accountId;
}
/**
* Sets Account Id
*/
public setAccountId(accountId: string) {
this.accountId = accountId;
}
/**
* Gets FirstName
*/
public getFirstName(): string {
return this.firstName;
}
/**
* Sets FirstName
*/
public setFirstName(firstName: string) {
this.firstName = firstName;
}
/**
* Gets LastName
*/
public getLastName(): string {
return this.lastName;
}
/**
* Sets LastName
*/
public setLastName(lastName: string) {
this.lastName = lastName;
}
}
import UserInfo from '../../d/user-info'
export default class QuickPage {
constructor() {}
lastNameText() {
return cy.get('#lastName');
}
firstNameText() {
return cy.get('#firstName');
}
accountIdText() {
return cy.get('#accountId');
}
public createNewUser(): UserInfo {
let userInfo = new UserInfo();
cy.getQuickRegisterUrl().then(url => {
cy.log(url);
cy.visit(url);
this.firstNameText().getText().then((text) => {
userInfo.setFirstName(text);
});
this.lastNameText().getText().then((text) => {
userInfo.setLastName(text);
});
this.accountIdText().getText().then((text) => {
userInfo.setAccountId(text);
});
});
return userInfo;
}
}
我正在尝试上面的代码,而userinfo始终返回未定义!!
有人可以向我解释如何以异步格式编写吗?
答案 0 :(得分:1)
在类中全局创建一个UserInfo
变量,并在您的createNewUser
方法中进行设置,并在您调用QuickPage
类的任何位置访问它们。无需编写返回类型
您可以这样写,这样就可以了
import UserInfo from '../../d/user-info'
export default class QuickPage {
public userInfo: UserInfo;
constructor() {
this.userInfo = new UserInfo();
}
lastNameText() {
return cy.get('#lastName');
}
firstNameText() {
return cy.get('#firstName');
}
accountIdText() {
return cy.get('#accountId');
}
public createNewUser(){
let userInfo = new UserInfo();
cy.getQuickRegisterUrl().then(url => {
cy.log(url);
cy.visit(url);
this.firstNameText()
.getText()
.then(text => {
this.userInfo.setFirstName(text);
});
this.lastNameText()
.getText()
.then(text => {
this.userInfo.setLastName(text);
});
this.accountIdText()
.getText()
.then(text => {
this.userInfo.setAccountId(text);
});
});
}
}
答案 1 :(得分:0)
由于createNewUser
个用户cy
命令,这些命令的结果只能通过then
函数使用。在打字稿中,您需要将返回类型声明为Chainable<UserInfo>
,而不是返回userInfo
,而应返回cy.wrap(userInfo)
。另外,在调用createNewUser
的地方,应该执行以下操作,而不是直接使用返回值:
createNewUser().then(userInfo => { ... })
之所以在您的代码中获得一个空对象,是因为then
内调用的任何操作都是异步执行的,因此userInfo
的成员的值在以下情况下仍未设置方法返回。
答案 2 :(得分:-1)
你好,你可以做这样的事情:
如果所有方法都异步并返回promise的解决方案:
public async createNewUser(): UserInfo {
let userInfo = new UserInfo();
return cy.getQuickRegisterUrl().then(url => {
cy.log(url);
cy.visit(url);
// if all this methode are async
return this.firstNameText().getText().then((text) => {
userInfo.setFirstName(text);
return this.lastNameText().getText().then((text) => {
userInfo.setLastName(text);
return this.accountIdText().getText().then((text) => {
userInfo.setAccountId(text);
return Promise.resolve(userInfo);
});
});
});
});
}