如何通过在量angular器中使用promise来查询mysql数据库
如何通过在量angular器中使用promise来查询mysql数据库?
我想在testing执行过程中多次执行不同的查询,但我的executeSelectQuery函数在testing开始时执行,而不是结束。 我如何用承诺来克服这个问题?
我也需要访问executeSelectQuery中的对象,我不能。 函数返回undefined。
下面的代码是我的executeSelectQuery函数的样子:
function executeSelectQuery(sql){ connectDatabase.connection.query(sql, function(err, data) { var result; if (err) { throw new Error('[ FAIL ] - Unsuccessful query execution!!!'); } else{ result = data[0].user; log.info('[ SUCCESS ] - Query executed successfully: ' + sql + ' with the following result ==> ' + result); return result; } });
}
这就是我的testing:
it('Should navigate to webpage..', function(){ log.info("Test is being executed.."); login.goTo(parameters.url); login.login(parameters.username, parameters.password); helper.executeSelectQuery(query_select); });
只要让你的executeSelectQuery()
函数返回一个可以parsing数据的promise。
executeSelectQuery = (sql) => { return new Promise((resolve, reject) => { connectDatabase.connection.query(sql, (err, data) => { if(err) { reject(err); } resolve(data); }); }); }
然后在你的testing中解决它
executeSelectQuery().then((data) => { console.log(data); })
保持查询函数在最后一个单独的“it”块中调用 。
describe('Overall Test Suite',function() { var expectedResult; //global variable for all 'it' blocks inside suite. it('Should navigate to webpage..', function(){ log.info("Test is being executed.."); login.goTo(parameters.url); login.login(parameters.username, parameters.password); }); it('Executing Queries', function(){ expect(helper.executeSelectQuery(query_select)).toBeEqual(expectedResult);//let jasmine resolve the promise implicitly }); });