删除数据库之前

时间:2017-11-17 05:56:01

标签: javascript node.js mocha sequelize.js

我已经看到很多这个问题的答案,但其中任何一个都适合我,我不知道为什么。

所以我想在运行测试之前删除数据库中的所有数据,然后添加一些数据。这就是我到目前为止所做的:

const db = require('../models');

describe('Setup database for testing', () => {
    before('Sync and create data', done => {
        db.sequelize
            .query('SET FOREIGN_KEY_CHECKS = 0', null, {raw: true})
            .then(() => {
                db.User.sync({force: true});
            })

            // Create everything the tests need here
            .then(() => {
                db.User.create({username: 'foo', password: 'secret', email: 'foo@local.dev'});
            })

            .then(() => {
                db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, {raw: true});
            })
            .then(() => {
                done();
            });
    });
});

当我在我的测试文件夹上运行mocha时,我没有错误,没有告诉我之前的挂钩运行(即使测试标题没有显示)。但是文件正在运行,因为当我在其中编写虚拟代码时,我有错误。

1 个答案:

答案 0 :(得分:0)

您需要在describe中至少进行一次测试才能运行前挂钩。

  describe('Setup database for testing', () => {
    before('Sync and create data', done => {
        db.sequelize
            .query('SET FOREIGN_KEY_CHECKS = 0', null, {raw: true})
            .then(() => {
                db.User.sync({force: true});
            })

            // Create everything the tests need here
            .then(() => {
                db.User.create({username: 'foo', password: 'secret', email: 'foo@local.dev'});
            })

            .then(() => {
                db.sequelize.query('SET FOREIGN_KEY_CHECKS = 1', null, {raw: true});
            })
            .then(() => {
                done();
            });
    });


    //add a test for the before hook to run 
    it("runs", function () {
        console.log("test");
    });
});