0

Mocha を使用して、Nodejs アプリをテスト データベースでテストしていました。各テストの前に DB をリセットするために、完全に機能する次のコードを用意しました。

  process.env.NODE_ENV = 'test';
  var knex = require('../db/knex');

  describe("Add Item", function() {

      beforeEach(function(done) {
        knex.migrate.rollback()
        .then(function() {
          knex.migrate.latest()
          .then(function() {
            return knex.seed.run()
            .then(function() {
              done();
            });
          });
        });
      });

  ...

それ以来、統合テストのために mocha から mocha-casperjs に切り替えましたが、knex の移行が実行されなくなりました。各フックの前に、まったく同じエラーメッセージが表示されます。

     undefined is not an object (evaluating 'knex.migrate.rollback')
     phantomjs://platform/new-item.js:12:17
     value@phantomjs://platform/mocha-casperjs.js:114:20
     callFnAsync@phantomjs://platform/mocha.js:4314:12
     run@phantomjs://platform/mocha.js:4266:18
     next@phantomjs://platform/mocha.js:4630:13
     phantomjs://platform/mocha.js:4652:9
     timeslice@phantomjs://platform/mocha.js:12620:27
4

1 に答える 1

0

移行機能が webpack ビルドに含まれていないことは確かです。http://knexjs.org/にアクセスしてデバッグ コンソールを開き、さまざまなクライアントをチェックアウトmysql.migrateすると、関数がまったく宣言されていないことがわかります。

実際には、ノード lib の代わりに webpack ビルドを明示的にロードすると、ノードでもチェックアウトできます。

// load webpack build instead of node build...
let knex = require('knex/build/knex')({client : 'pg'});
console.log(knex.migrate);
// outputs: {}

それで...質問は、node.jsではなくPhantomJSブラウザーでテストを実行しようとしているのはなぜですか?

client.migrate が空です

于 2016-07-01T12:41:34.763 に答える