如何将 SFDX 与赛普拉斯一起使用?

How can I use SFDX with Cypress?

我目前可以在我的 cypress 文件夹中连接我的销售团队。问题是我无法在规范文件中同时使用这两种工具。另外,我正在尝试使用 jsforce,但我不知道如何与 cypress 集成。

有没有人知道这样做的好主意?

示例:

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', function(err, opportunity){
        if(err){ return console.error(err);}
        console.log(opportunity.records)
    });
});

如果您转到 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 它们(而不是 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。我希望他们受到同样的对待。

您可以在工作系统上尝试使用和不使用 return,看看哪种方式有效。


您也可以尝试将 Web 浏览器 选项卡上的代码调整为测试脚本中的 运行,但由于您使用 dotenvprocess.env 你可能仍然需要一个任务来访问那些环境变量。