2

Sequelize のステップ 1 で苦労しています。私はチュートリアルを読みましたが、何か基本的なことを見逃しているに違いありません。なぜなら、私が間違っていることを理解しようとしてすでに 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

問題は、sequelize ではなく、非同期コードであるという事実にありました。これを修正するには、テストを変更するだけです。

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 に答える