在每次测试之前重置数据库



我正在使用节点和超级测试来制作一个简单的应用程序。我为本地测试数据库获得了 SQlite3。我做了一个简单的测试,将一个超级插入到数据库中。我想在每次运行测试时重置数据库。我现在正在查看文档,似乎找不到它。我想我会在这里问,因为似乎有人很可能会知道这些信息。

const request = require('supertest');
const server = require('../server');
describe('Authentication', function() {
//database reset here
it('should create a new user /users/registration', function(done) {
request(server)
.post('/users/register')
.send({
username: 'user-name',
email: 'luser-name@gmail.com',
password: '12345'
})
.set('Accept', 'application/json')
.expect(201, done);
});
});

如果你想在每次测试之前运行任何一段代码,你可以在jest中使用beforeEach函数

describe('my test', () => {
beforeEach(() => {
// code to run before each test
});
test('test 1', () => {
// code
});
test('test 2', () => {
// code
});
});

因此,最好的方法是在 API 的路由函数中有一些逻辑

Receive an API request
Check if ['X-MOCK-HEADER'] exists
If it does then route to the mock version of the endpoint

因此,创建用户的模拟将始终返回 201 OK - 您的模拟端点将执行以下操作:

const routes = {
CREATE_USER_OK:() => { return {....} } // make sure these return proper http responses
CREATE_USER_BAD_REQUEST: () { return {...} }
}
return routes[HEADER_VALUE]()

原因是您在此实例中测试的是路由而不是数据库类,因此您只想返回静态数据,如果您想测试其他内容,只需将 X-MOCK-HEADER 值更改为您想要的任何值并添加模拟路由以返回正确的 http 响应/代码 - 我需要知道 API 代码的样子才能帮助您进行后端实现。

如果可能的话,不要弄乱用于测试的暂存数据库,因为随着它逐渐被垃圾填满,您将遭受很多痛苦。

此外,如果您正在使用前端应用程序,则可以使用静态数据快速进行原型设计 - 如果您有前端团队等待 API 端点说创建登录屏幕,这将特别有用。

没有定义的方法可以重置 sqlite db,只需删除数据库并重新创建即可。

Sqlite:如何重置所有数据库表?

我在文件中做了这个,它工作正常

const request = require('supertest');
const server = require('../server');
const knex = require('knex');
const dbConfig = require('../knexfile.js')['test'];
const db = knex(dbConfig);
describe('Authentication', () => {
beforeEach(async () => {
await db('users').truncate();
});
it('should create a new user /users/registration', function(done) {
request(server)
.post('/users/register')
.send({
username: 'user-name',
email: 'luser-name@gmail.com',
password: '12345'
})
.set('Accept', 'application/json')
.expect(201, done);
});
});

最新更新