【发布时间】:2018-11-30 02:49:25
【问题描述】:
问题:因此,作为单元测试的初学者,我最近遇到的一个问题是处理具有大量数据库使用的类。
使用的技术: Typescript、SinonJS、Node-Postgres 和 Jest
示例:对于给定的函数
public async insertUserDetails() {
const confirmationCode = this.generateConfirmationCode();
try {
await this.db.query({
text: 'INSERT INTO users (firstname, lastname, email, password, registration_date, confirmation_code) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *',
values: [this.firstname, this.lastname, this.email, this.password, this.registrationDate, confirmationCode]
});
} catch (error) {
throw error;
}
}
问题: 合适的单元测试是确保使用正确的 sql 调用 db.query() 函数,如下所示?或者这会被认为是浪费时间和脆弱测试?
test("should format correct sql", async () => {
//Test Setup
const user = new User({
firstname: "John",
lastname: "doe",
email: "email@example.com",
password: "some_password_hash",
registrationDate: "some_random_date",
});
//Mocks
const queryStub = sinon.stub(user.db, "query");
const confirmationCode = sinon.stub(user,'generateConfirmationCode').returns("48fsakb8a-cfjdab");
const sampleQuery = {
text: 'INSERT INTO users (firstname, lastname, email, password, registration_date, confirmation_code) VALUES ($1, $2, $3, $4, $5, $6) RETURNING *',
values: [user.firstname, user.lastname, user.email, user.password, user.registrationDate, confirmationCode]
}
//Preform
await user.insertUserDetails();
//Assert
sinon.assert.calledWith(queryStub, sampleQuery);
});
或者我应该跳过对这些类型的函数和类的单元测试并建立一个集成测试数据库并通过集成测试来测试这些案例?
这是一个非常简化的示例,因为我没有测试数据库事务,但是测试事务变成了一个更大的蠕虫罐,因为执行了多个查询。
感谢您的帮助!这让我发疯-__-
【问题讨论】:
-
catch (error) { throw error; }毫无意义。只需删除try/catch包装器即可。
标签: javascript node.js unit-testing jestjs sinon