2

我正在努力完成 Sequelize 的第 1 步。我已经阅读了本教程,但我必须缺少一些基本的东西,因为我已经花了一天多的时间试图找出我做错了什么。

以下是我使用 Mocha 编写的单元测试。

var db = require("../../db.js").sequelize;
var DataTypes = require("sequelize");

var _table = db.define('users', {
      name: DataTypes.STRING,
      email: DataTypes.STRING
    }, { 
      timestamps: false
    });

var assert = require("assert")
describe('Users', function(){
  describe('#save()', function(){
    it('should save a user', function(){
        _table
        .build({name: 'test', email: 'a@a.com'})
        .save()
        .success(function(o){
            console.log("saved");
            console.log(o.values);
        }).error(function(error) {
            console.log("++++++++++");
            console.log(error);
        });

    })
  })
})

它运行良好,我现在已经删除了断言。问题是,我没有看到任何控制台日志,不是成功也不是错误。另外,数据库中没有行。

db.js 只是一个实用文件,它有助于使用 db 配置创建 Sequelize JS 的实例 - 我已经完成了一个 console.dir 并查看了该实例,它看起来如下:

{ options: 
   { dialect: 'mysql',
     host: 'localhost',
     port: 3306,
     protocol: 'tcp',
     define: {},
     query: {},
     sync: {},
     logging: [Function],
     omitNull: false,
     queue: true,
     native: false,
     replication: false,
     pool: { maxConnections: 10, minConnections: 0, maxIdleTime: 1000 } },
  config: 
   { database: 'beacon',
     username: 'beacon',
     password: 'beacon',
     host: 'localhost',
     port: 3306,
     pool: { maxConnections: 10, minConnections: 0, maxIdleTime: 1000 },
     protocol: 'tcp',
     queue: true,
     native: false,
     replication: false,
     maxConcurrentQueries: undefined },
  daoFactoryManager: { daos: [ [Object], [Object] ], sequelize: [Circular] },
  connectorManager: 
   { sequelize: [Circular],
     client: null,
     config: 
      { database: 'beacon',
        username: 'beacon',
        password: 'beacon',
        host: 'localhost',
        port: 3306,
        pool: [Object],
        protocol: 'tcp',
        queue: true,
        native: false,
        replication: false,
        maxConcurrentQueries: undefined },
     disconnectTimeoutId: null,
     queue: [],
     activeQueue: [ [Object] ],
     maxConcurrentQueries: 50,
     poolCfg: { maxConnections: 10, minConnections: 0, maxIdleTime: 1000 },
     pendingQueries: 0,
     useReplicaton: false,
     useQueue: true,
     pool: 
      { destroy: [Function],
        acquire: [Function],
        borrow: [Function],
        release: [Function],
        returnToPool: [Function],
        drain: [Function],
        destroyAllNow: [Function],
        getPoolSize: [Function],
        getName: [Function],
        availableObjectsCount: [Function],
        waitingClientsCount: [Function] },
     isConnecting: false },
  importCache: {},
  queryInterface: 
   { sequelize: [Circular],
     QueryGenerator: 
      { createTableQuery: [Function],
        dropTableQuery: [Function],
        renameTableQuery: [Function],
        showTablesQuery: [Function],
        addColumnQuery: [Function],
        removeColumnQuery: [Function],
        changeColumnQuery: [Function],
        renameColumnQuery: [Function],
        selectQuery: [Function],
        insertQuery: [Function],
        updateQuery: [Function],
        deleteQuery: [Function],
        incrementQuery: [Function],
        addIndexQuery: [Function],
        showIndexQuery: [Function],
        removeIndexQuery: [Function],
        getWhereConditions: [Function],
        hashToWhereConditions: [Function],
        attributesToSQL: [Function],
        findAutoIncrementField: [Function],
        addQuotes: [Function],
        removeQuotes: [Function],
        options: [Object] } } }

现在我在屏幕上记录了 INSERT 语句,但该实例从未进入数据库。我究竟做错了什么?

4

1 回答 1

5

问题不在于续集,而在于它是异步代码这一事实。要解决此问题,只需修改测试:

var db = require("../../db.js").sequelize;
var DataTypes = require("sequelize");

var _table = db.define('users', {
      name: DataTypes.STRING,
      email: DataTypes.STRING
    }, { 
      timestamps: false
    });

var assert = require("assert")
describe('Users', function(){
  describe('#save()', function(){
    it('should save a user', function(done){
        _table
        .build({name: 'test', email: 'a@a.com'})
        .save()
        .success(function(o){
            console.log("saved");
            console.log(o.values);
            done();
        }).error(function(error) {
            console.log("++++++++++");
            console.log(error);
            done();
        });

    })
  })
})

添加回调(完成)有帮助!

于 2013-04-21T10:40:09.593 回答