【问题标题】:How can I use SFDX with Cypress?如何将 SFDX 与赛普拉斯一起使用?
【发布时间】:2021-05-25 21:33:20
【问题描述】:

我目前能够在我的 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)
    });
});

【问题讨论】:

    标签: javascript automation salesforce cypress jsforce


    【解决方案1】:

    如果您转到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 选项卡上的代码以在测试脚本中运行,但由于您使用 dotenvprocess.env,您可能仍然需要一个任务来访问这些环境变量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-11
      • 2018-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      • 2022-12-10
      • 1970-01-01
      相关资源
      最近更新 更多