gpt4 book ai didi

node.js - 诗农用 Sequelize 进行 mock

转载 作者:太空宇宙 更新时间:2023-11-04 00:32:30 26 4
gpt4 key购买 nike

我使用 Sequelize 有以下 Nodejs 函数:

var processDatabase = function (dbConnection, schema, recordsets) {

var myLogTable = dbConnection.define(schema.tableName, schema.myLogSchema, schema.myLogSchemaIndex);
myLogTable.sync({

force: false,
freezeTableName: true,
logging: console.log

}).then(function () {

console.log('Table synced...');

for (k = 0; k < recordsets.length; k++) {

var query = "Some query";

dbConnection.query(
query, {
type: dbConnection.QueryTypes.SELECT
}
)
.then(function (results) {
console.log('MYSQL Selection Done');
})
.catch(function (err) {
console.log('MYSQL Error: ' + err.message);
});
}
}).catch(function (err) {
console.log('MYSQL Sync Error: ' + err.message);
});
};

我是模拟新手,不太知道如何测试 catch 部分。

这是我可以提出的单元测试,但我不知道对sync的调用如何转到catch部分:

describe('when call processDatabase', function () {

it('should process successfully when sync fails', function (done) {

seqConnection.define = function (tableName, schema, schemaIndex) {
return mockMyLogModel;
};

processProfilesNotMapped(seqConnection, {
tableName: 'SomeTable',
myLogSchema: myLogSchema,
myLogSchemaIndex: myLogSchemaIndex
}, []);
done();
})
});

我将如何编写我的模拟,以便我可以测试 catch 和 then 以便它们可以被覆盖?

最佳答案

您需要在模拟中推迟异常,因为“同步”正在使用 promise 。您可以使用 q 库或任何其他库。这样,当您执行同步函数时,它将转到 catch 部分
使用 q 的示例:

describe('when call processDatabase', function () {

it('should process successfully when sync fails', function (done) {

seqConnection.define = function (tableName, schema, schemaIndex) {
const mock = {
sync: function(){
const deferred = q.defer();
deferred.reject(new Error('Some error'));
return deferred.promise;
}
}
return mock;
};

expect(
function(){
cmdManager.execute("getProfileDummy","hosar@gmail.com")
}
).to.throw(Error);

processProfilesNotMapped(seqConnection, {
tableName: 'SomeTable',
myLogSchema: myLogSchema,
myLogSchemaIndex: myLogSchemaIndex
}, []);
done();
})
});

关于node.js - 诗农用 Sequelize 进行 mock ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40464939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com