gpt4 book ai didi

mysql - 将查询与测试分离的最佳实践

转载 作者:行者123 更新时间:2023-11-29 03:36:01 26 4
gpt4 key购买 nike

我正在寻找使用 mocha 或 sinon 测试 mysql 查询的最佳实践。我正在尝试测试非常基本的数据库查询,例如保存:

User.prototype.save = function(cb) {

var query = 'INSERT INTO user (name, email, password, img, description)'
+ 'values (?, ?, ?, ?, ?)';

var params = [this.name, this.email, this.pass, this.img, this.description];

db.query(query,
params,
function(err, rows) {
if (err) return cb(err);
cb(rows.insertId);
}
);
};

我相信我想模拟数据库并使用该对象而不是我的 db 对象,但我还想将测试逻辑与应用程序逻辑分开。

我尝试了

的变体
describe('User', function() {
before(function() {
mock = sinon.mock(require('../middleware/db'));
})
describe('.save()', function() {
var uid;
it('should run save on a user', function() {
var user = new User ({
name: 'Test Case 1',
email: 't1@example.com',
pass: 'pass',
img: 'path/to/img.jpg'
});
user.save(function(id) {
id.should.be.ok;
var uid = id;
});
})
it('should save the user', function() {
var ret = User.find(uid);
ret.should.be.ok;
ret.should.have.property('description');
ret.name.should.equal('Test Case 1');
ret.email.should.equal('t1@example.com');
})
})

测试此类功能的最佳做法是什么?

谢谢

最佳答案

与数据库的实际交互不应由单元测试处理,而应由端到端测试处理。使用数据库进行端到端测试的最佳做法是定义一个数据库状态,该状态将在每次测试之前加载到数据库中。

在单元测试方面,因为这个方法是调用外部模块的包装器,所以将单元测试推迟到第三方可能就足够了。

关于mysql - 将查询与测试分离的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21670713/

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