2016-06-30 5 views
0

테스트 데이터베이스를 사용하여 Nodejs 애플리케이션을 테스트하기 위해 Mocha를 사용하고있었습니다. 각 테스트하기 전에 DB를 재설정하기 위해 내가 완벽하게 작동 다음 코드를했다 : 지금 내 통합 테스트를위한 모카 casperjs에 모카로 전환하고, 이후 내가했습니다모카 테스트 간 Knex 마이그레이션 실행

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(); 
      }); 
      }); 
     }); 
     }); 

    ... 

을 knex 마이그레이션하지 않습니다 운영. 각 후크 전에 정확하게 다음과 같은 오류 메시지가 표시됩니다.

 undefined is not an object (evaluating 'knex.migrate.rollback') 
    phantomjs://platform/new-item.js:12:17 
    [email protected]://platform/mocha-casperjs.js:114:20 
    [email protected]://platform/mocha.js:4314:12 
    [email protected]://platform/mocha.js:4266:18 
    [email protected]://platform/mocha.js:4630:13 
    phantomjs://platform/mocha.js:4652:9 
    [email protected]://platform/mocha.js:12620:27 

답변

0

마이그레이션 기능이 webpack 빌드에 포함되어 있지 않은지 확실히 알고 있습니다. http://knexjs.org/으로 이동하여 디버그 콘솔을 열고 다른 클라이언트를 체크 아웃합니다. mysql.migrate 당신은 전혀 선언 된 함수가 없다는 것을 알 수 있습니다.

실제로 node lib 대신 webpack build를 명시 적으로로드하면 노드를 사용하여 체크 아웃 할 수 있습니다.

// 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 is empty

+0

감사합니다. knex가 필요한 테스트에서 Phantomjs는 피할 것입니다. – cmcloughlin