如果您转到JSForce 页面,您使用的代码位于Node.js选项卡下。
任何需要 Node 运行的东西都必须放在一个任务中,所以我不以为然
/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
)。
基于此示例返回文件夹中的文件数,需要 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)
but no return on resolve(files.length)
。我希望他们得到同样的待遇。
return
您可以在工作系统上尝试使用和不使用,看看哪种方式有效。
您也可以尝试调整Web 浏览器选项卡上的代码以在测试脚本中运行,但由于您使用dotenv
并且process.env
您可能仍然需要一个任务来访问这些环境变量。