Nightwatch自定义命令回调 [英] nightwatch custom command callback

查看:106
本文介绍了Nightwatch自定义命令回调的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图在守夜人中创建一个自定义命令,该命令在Postgres数据库上运行查询并返回结果.查询运行得很好,并将结果输出到控制台,但是测试的执行停止.我不了解回调的工作方式.如何解决此自定义命令?

I'm trying to create a custom command in nightwatch that runs a query on a Postgres database and returns the result. The query runs just fine and outputs the result to the console but then the execution of the test stops. I don't understand how callbacks work. How can I fix this custom command?

exports.command = function(sql, callback) {
  var self = this;
  var pg = require('pg');
  var conString = self.globals.testinfo.connectionString;
  var db = new pg.Client(conString);
  db.connect(function(err) {
    if(err) {
      console.error('could not connect', err);
    } 
    else {
      db.query(sql, function(err, result) {
        if(err) {
          console.log('error running query', err);
        } 
        else {
          console.log(result.rows.length);
          db.end();
        }
      });
    }
  }),
  function(result) {
    if (typeof callback === 'function') {
      callback.call(self, result);
    }
  }  
  return this;
};

推荐答案

我必须将数据库连接包装在perform命令中才能正常工作.我不确定这是否是处理回调的最佳方法,但是它可以工作.这是自定义命令的更新版本:

I had to wrap the database connection in a perform command to get this working. I'm not sure if this is the best way to handle the callback, but it works. Here's the updated version of the custom command:

exports.command = function(sql,callback) {
  var self = this;
  var pg = require('pg');
  var cs = self.globals.testinfo.connectionString;
  self.perform(function(self,done) {
    pg.connect(cs,function(err,db,done) {
      if(err) {
        return console.error(err);
      }  
      db.query(sql, function(err,result) {
        done();
        if(err) {
          return console.error(err);
        } 
        console.log(result.rows.length);
        callback(result.rows[0]);
      });
    });
    pg.end();
    done();
  });
};

这是我在测试中调用自定义命令的方式:

Here's how I call the custom command in the test:

browser.myCustomCommand('select * from table limit 1;', function(row) {
  browser.assert.deepEqual(row.column,'some value');
});

这篇关于Nightwatch自定义命令回调的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆