如果您转到JSForce page,您使用的代码位于 Node.js 标签下。
任何需要 Node 运行的东西都必须放在 task 中,所以别想了
/cypress/plugins/index.js
module.exports = (on, config) => {
on('task', {
loginJSForce() {
const jsforce = require('jsforce');
require('dotenv').config();
const {SF_LOGIN_URL, USER_NAME, PASSWORD, SECURITY_TOKEN} = process.env;
const conn = new jsforce.Connection({
loginUrl: SF_LOGIN_URL
})
conn.login(USER_NAME, PASSWORD+SECURITY_TOKEN, (err, userInfo) => {
if (err) {
console.error(err)
}
conn.query('SELECT Id, Name FROM Opportunity', (err, opportunity) => {
if (err) {
return console.error(err);
}
console.log(opportunity.records)
});
});
return null
},
})
}
测试
cy.task('loginJSForce');
我猜你想在测试中对opportunity.records 运行一些断言,在这种情况下你至少需要返回它们(而不是return null)。
基于这个例子Return number of files in the folder,它需要一个 Promise 并且可能看起来像这样
/cypress/plugins/index.js
module.exports = (on, config) => {
on('task', {
loginJSForce() {
const jsforce = require('jsforce');
require('dotenv').config();
const {SF_LOGIN_URL, USER_NAME, PASSWORD, SECURITY_TOKEN} = process.env;
const conn = new jsforce.Connection({ loginUrl: SF_LOGIN_URL });
return new Promise((resolve, reject) => {
conn.login(USER_NAME, PASSWORD+SECURITY_TOKEN, (err, userInfo) => {
if (err) {
return reject(err);
}
conn.query('SELECT Id, Name FROM Opportunity', (err, opportunity) => {
if (err) {
return reject(err);
}
return resolve(opportunity.records)
})
})
})
},
})
}
测试
cy.task('loginJSForce')
.then(records => console.log(records));
示例中有些内容不一致,例如return reject(err) 但resolve(files.length) 没有返回。我希望他们得到同样的对待。
您可以在工作系统上尝试使用和不使用return,看看哪种方式有效。
您也可以尝试调整 Web Browser 选项卡上的代码以在测试脚本中运行,但由于您使用 dotenv 和 process.env,您可能仍然需要一个任务来访问这些环境变量。