0

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

4

1 回答 1

2

如果您转到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您可能仍然需要一个任务来访问这些环境变量。

于 2021-05-25T23:42:35.257 回答