Research
Security News
Quasar RAT Disguised as an npm Package for Detecting Vulnerabilities in Ethereum Smart Contracts
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
ava-rethinkdb
Advanced tools
npm install --save-dev ava-rethinkdb
This is a hacky way of using the NodeJS RethinkDB and AVA together. It uses undocumented features of the RethinkDB driver, and should be considered experimental.
By running init
and cleanup
you get a fully managed database instance for
your tests! Everything is cleaned up at the end, so there's no leftover fixtures
import test from 'ava'
import { init, cleanup } from 'ava-rethinkdb'
test.before(init())
test.after.always(cleanup)
test('I should have a RethinkDB instance', async t => {
let connection = await r.connect({})
await r.dbCreate('MyDatabase')
})
The problem is that if you want to do multiple tests they all happen at the same time due to the magic of AVA. Luckily you can seed the database with a simple JSON structure
import test from 'ava'
import { init, cleanup } from 'ava-rethinkdb'
const TEST_DATA = {
my_database: { // The top level is the database to create
my_table: [ // Next is a table in the database. This holds an array of documents to insert
{ name: 'A', value: 1},
{ name: 'B', value: 2}
],
users: [
{ username: 'daniel', email: 'wry@gmail.com' },
{ username: 'heya', email: 'ayeh@outlook.com' }
]
}
}
test.before(init(TEST_DATA))
test.after.always(cleanup)
test('These documents should exist', async t => {
let conn = await r.connect({ db: 'my_database' })
let results = await r.table('my_table').run(conn)
let data = await results.toArray()
console.log(data)
t.truthy(data)
})
This is where the magic really is. Every single test file is given its own
RethinkDB instance. This makes it perfect for integration tests against
endpoints, because now they can all be used in parallel! The magic comes
from modifying the default port the driver looks at, making it different
in each process, then spinning up a RethinkDB instance at that port.
Check out the test
directory for a good example.
// app.js
const express = require('express')
const r = require('rethinkdb')
let app = express()
app.get('/users', (req, res) => {
r.connect({ db: 'app' })
.then(conn => r.table('users').run(conn))
.then(results => results.toArray())
.then(users => res.status(200).send({ users }))
.catch(e => res.status(500).send(e))
})
module.exports = { app }
// test/integration/users-test-1.js
import test from 'ava'
import request from 'supertest-as-promised'
import { init, cleanup } from 'ava-rethinkdb'
import { app } from '../../app.js'
const TEST_DATA = {
app: {
users: [
{ name: 'UserA' },
{ name: 'UserB' }
]
}
}
test('Users should be returned from /users', t => {
return request(app)
.get('/users')
.expect(200)
})
// test/integration/users-test-2.js
import test from 'ava'
import request from 'supertest-as-promised'
import { init, cleanup } from 'ava-rethinkdb'
import { app } from '../../app.js'
const TEST_DATA = {
app: {
users: [
{ name: 'UserC' },
{ name: 'UserD' }
]
}
}
test('Different users should be returned from /users', t => {
return request(app)
.get('/users')
.expect(200)
})
The TEST_DATA
contained in each file creates a new database to be used for
each file!
To view the output from all the server logs, set the environment variable
AVA_RETHINKDB_DEBUG=on
FAQs
RethinkDB helpers for AVA
The npm package ava-rethinkdb receives a total of 3 weekly downloads. As such, ava-rethinkdb popularity was classified as not popular.
We found that ava-rethinkdb demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket researchers uncover a malicious npm package posing as a tool for detecting vulnerabilities in Etherium smart contracts.
Security News
Research
A supply chain attack on Rspack's npm packages injected cryptomining malware, potentially impacting thousands of developers.
Research
Security News
Socket researchers discovered a malware campaign on npm delivering the Skuld infostealer via typosquatted packages, exposing sensitive data.