我正在尝试在SQL Server上执行一个简单的查询,但是当我使用量角器运行它时,它只是快速运行并且不返回(记录)任何内容。我会感谢任何提示,工作示例或指向我做错的指示以及如何使用量角器在SQL Server上执行SQL查询。
var sql = require('mssql');
describe('test db connection', function () {
it('tests db connection', function () {
ConnectDB()
})
function ConnectDB() {
var config = {
user: 'user',
password: 'password',
server: 'xyz.database.windows.net',
database: 'dbdev',
options: {
encrypt: true
}
}
var connection = new sql.Connection(config)
connection.connect(function (err) {
console.log(err)
})
var request = new sql.Request(connection);
request.query('select * from Config where [Key] like \'HidePreop%\'', function (err, recordeset) {
var res = recordeset;
console.log(res)
});
答案 0 :(得分:4)
量角器测试 - it
块只等待Protractor控制流中的webDriverJS命令完成,以及您必须手动使it
块等待done
的任何其他异步活动。< / p>
在这种情况下 -
describe('test db connection', function () {
it('tests db connection', function (done) {
// Any method that returns a promise. Similary if your method returns a callback you can handle accordingly
ConnectDB().then(function _onSuccess(){
done();
}).catch(function _onFailure(err){
done.fail(err);
})
})
});
我会修改你的功能 - ConnectDB()
以根据mssql npm package提供的回调的分辨率返回一个承诺。 Refer here关于如何将回调转换为Promises。这是一个很棒的教程。
function ConnectDB() {
return new Promise(function (fulfill, reject) {
var config = {
user: 'user',
.............
};
var connection = new sql.Connection(config);
connection.connect(function (err) {
reject(err);
});
var request = new sql.Request(connection);
request.query('select * from Config where [Key] like \'HidePreop%\'', function (err, recordeset) {
if (err) reject(err);
else fulfill(recordeset);
});
});
}
答案 1 :(得分:1)
我在其自己的文件中使用此配置访问MSSQL数据库,然后将其导入测试文件,因此我可以使用它有点像假的页面对象。
我强烈建议将任何数据库信息存储在存储库外部的外部文件中。我正在使用npm库dotenv中的.env文件,可以使用npm install --save-dev dotenv
//db.js
const sql = require('mssql');
require('dotenv').config();
var config = {
user: process.env.MSSQL_USERNAME,
password: process.env.MSSQL_PASSWORD,
server: process.env.MSSQL_SERVER,
database: 'YOURDB',
options: {
encrypt: true
}
};
module.exports = {
/** Define sql queries here */
deleteEmployeeByLastName(lastName) {
let my_query = `DELETE FROM dbo.Employee WHERE LastName='${lastName}'`;
sql.connect(config).then(function () {
new sql.Request()
.query(my_query).then(function (recordset) {}).catch(function (err) {
console.log(err);
});
});
}
}
测试文件看起来应该是这样的
//test.js
var db = require('db.js');
describe('Employee Management', function () {
it('Deleting an employee', function (done) {
db.deleteEmployeeByLastName('Pmurt');
//REST OF CODE HERE
//...
//...
done();
})
});
答案 2 :(得分:1)
以上都不适合我,然后我找到了此链接-https://www.tutorialsteacher.com/nodejs/access-sql-server-in-nodejs 我按照他们的建议 另外,我从链接中获取信息,将其放置在函数中,然后将函数放置在类中。
export class SqlDo {
static serverDo() {
//链接中的信息
并在
之后添加了更多内容var server = app.listen(5000, function () {
console.log('Server is running..');
部分。 我添加了
browser.waitForAngularEnabled(false);
browser.get('http://localhost:5000');
,这会将输出添加到屏幕截图报告程序收集的屏幕截图中。 然后,我创建了一个规范,并在其中调用了class.function
import { SqlDo } from './server';
describe('', () => {
it('test connection and output', () => {
SqlDo.serverDo();
});
});
所有这些都与渲染的数据库输出,屏幕截图以及html报告中捕获的屏幕截图一起使用。
我希望这能帮助仍然挣扎的人。
答案 3 :(得分:0)
发布mssql@4.0.4的工作示例
var sql = require('mssql');
describe('test db connection', function () {
it('tests db connection', function (done) {
ConnectDB().then(function _onSuccess(_returned){
console.log(_returned.recordset[0].FirstPSPOrderId)
done();
}).catch(function _onFailure(err){
done.fail(err);
})
})
});
function ConnectDB() {
return new Promise(function (fulfill, reject) {
var config = {
user: 'xxx',
password: 'xxx',
server: 'xxx',
port: 'xxx',
database: 'xxxxxx',
options: {
encrypt: true
}
};
var connection = new sql.ConnectionPool(config);
connection.connect((err) => {
if (err) reject(err);
//});
let query = "select [FirstPSPOrderId] from XYZ"
connection.request()
.query(query, (err, recordeset) => {
console.dir('Record set: ' + recordeset)
console.dir('Err: ' + err)
if (err) reject(err);
else fulfill(recordeset);
});
});
});
}
答案 4 :(得分:0)
基于异步/等待的更新答案:
package.json:
"devDependencies": {
"@types/mssql": "4.0.11",
"msnodesqlv8": "0.6.11",
"mssql": "4.3.0",
}
测试:
import { ConnectionPool } from 'mssql/msnodesqlv8';
describe('any test', () => {
it('should prepare db', async () => {
const connectionString = 'Server=#server#;Database=#db#;Trusted_Connection=Yes;Driver=msnodesqlv8'
const connectionPool: ConnectionPool = new ConnectionPool(connectionString);
await connectionPool.connect();
const result = await connectionPool.request().query('select 'Hello World' as resultColumn');
connectionPool.close();
expect(result.recordset[0].resultColumn).toEqual('Hello World');
}
}
使用准备数据的sql语句替换查询。例如从用户删除... 然后使用result.affectedRows查看删除是否有效