Tredun ohjelmistokehittäjien kurssimateriaaleja
Kun testataan tietokannan kanssa, olisi aina ennen testejä oltava varma siitä, mitä tietokannassa on. Tätä varten on hyvä ajaa seed:it ennen testejä.
Kopioidaan seeds-kansio test-kansion sisään. Kopioidaan myös .env-tiedosto test-kansioon. Asennetaan test-kansiossa tarvittavat kirjastot:
npm i knex mysql2 dotenv bcryptjs --save-dev
Tehdään test-kansion juureen tiedosto notesdemoseeds.js, joka sisältää koodin jolla seed:it voidaan ajaa tietokantaan:
require('dotenv').config()
const options = {
client: process.env.DB_TYPE,
connection: {
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_DATABASE,
ssl: { rejectUnauthorized: false }
}
}
const knex = require('knex')(options);
const seedNotesDB = async () => {
console.log(options)
await knex.seed.run();
return await knex.destroy();
}
module.exports = seedNotesDB;
Lisätään cypress.config.js tiedostoon uusi NodeEvent task:
const seedNotesDB = require('./notesdemoseeds.js')
module.exports = defineConfig({
e2e: {
setupNodeEvents(on, config) {
on('task', {
'defaults:db': () => {
return seedNotesDB();
},
})
},
baseUrl: 'https://tiipar19notesdemotest.node.treok.io/',
}
})
Lopuksi lisätään beforeEach-osioon:
cy.task('defaults:db') //seeds the database
Lisätään testitiedoston alkuun:
const seedNotesDB = require('./notesdemoseeds.js')
Sekä beforeAll:n sisälle:
await seedNotesDB(); //seeding
Nyt jokainen testi lähtee tilanteesta, jossa tietokannan sisältö on tunnettu.