2015-09-16 54 views
2

我一直试图让这个工作几天。我浏览过互联网和StackOverflow。有一些示例说明如何使用MongoDB测试API以及如何编写执行PSQL命令的Mocha测试。这不是我想要的。Mocha/Node.js/PostgreSQL集成测试

我创建了pg的包装,从指令称为db.jsin this SO question(注意我的电话意见console.log()

pg = require("pg"); 
config = require("./../config.js"); 

module.exports = { 
    query: function(text, values, cb) { 
     console.log("I get to this in Mocha"); 
     pg.connect(config.connectionString, function(err, client, done) { 
      console.log("I never get here"); 
      if (err) return console.error("error connecting to postgres: ", err); 
      client.query(text, values, function(err, result) { 
       console.log("I most certainly never get here"); 
       done(); 
       cb(err, result); 
      }) 
     }); 
    } 
} 

就这样,我可以做到以下几点:

$ node 
$ var db = require ("./path/to/db.js"); 
$ db.query("insert into sometable(id, value) values(1, \"blah\")", {}, function (err, result) { 
      if (err) { console.error ("db errored out man"); } 
      console.log("no error..."); 
      console.log(result); 
     }); 

信不信由你,无故障运行!

我不能做的是同样的事情在一个mocha测试(即db.spec.js):

var db = require("./../../../Data/db.js"); 

// These tests assume you have run the scripts in the -SQL repo 
describe("module: db", function() { 
    it("provides a wrapper for the execution of queries", function() { 
     db.query("insert into employer.profile \ 
      (id, returncustomer, receiveupdates, name, email, password, active) \ 
      values (4, true, true, 'someNameLol', '[email protected]', 'change_me', true)", {}, 
      function (err, stdout, stderr) { 
       console.log(err || ""); 
       console.log(stdout || ""); 
       console.log(stderr || ""); 
      } 
     ); 
    }); 
}); 

帮助!我希望能够使用我的数据库连接编写集成测试。我缺少组件吗?必需的库?

这是全部手动滚动的,我没有使用IDE,因为我想了解它是如何由我自己工作的。

在此先感谢。

回答

2

您需要包含done参数,并在测试结束时调用它。

describe("module: db", function() { 
    it("provides a wrapper for the execution of queries", function (done) { 
     db.query("insert into employer.profile \ 
      (id, returncustomer, receiveupdates, name, email, password, active) \ 
      values (4, true, true, 'someNameLol', '[email protected]', 'change_me', true)", {}, 
      function (err, stdout, stderr) { 
       console.log(err || ""); 
       console.log(stdout || ""); 
       console.log(stderr || ""); 
       done(); 
      } 
     ); 
    }); 
}); 
+0

我知道我应该避免像“谢谢!”这样的评论。但是...谢谢你。 –

+1

不客气:) –