javascript - 我应该如何进行异步单元测试?

标签 javascript node.js unit-testing pg-promise

我正在使用 pg-promise。我是学习者,如果这对你来说似乎微不足道,请原谅。我如何编写单元测试。它错误数据未定义。我一直在 js 文件中建立连接并导出该模块。另一个 js 文件用于查询数据库并获取结果集。代码按预期工作,遇到问题如何使用 mocha 和 chai 编写单元测试。

test1.js
var dbConn= pgp(connUrl);
module.exports = {
    getconnect: function () {
        return dbConn;
    }
};

test2.js

module.exports = {
    getData: function (req, res) {
      db.getconnect().query(sqlStr, true)
                .then(function (data) {  
                    console.log("DATA:", data);
                    return data; 
                  } } }

单元测试.js

describe("Test Cases", function (done) {

    it('retrieve response', function (done) {
        var req = {};
        var res = {};
        test2.getData(req, res);    
        // how would i retrieve value of data from test2.js so i can test
        done();
    });
});

我如何从 unittest.js 中的 test2.js 中检索“数据”值

最佳答案

您的getData 必须返回 promise 。客户端代码将能够在它完成(已解决)的那一刻识别出来。

module.exports = {
    getData: function (req, res) {
      return db.getconnect().query(sqlStr, true)
                .then(function (data) {  
                    console.log("DATA:", data);
                    return data; 
                  } } }

测试:

describe("Test Cases", function () {
    it('retrieve response', function (done) {
        var req = {};
        var res = {};
        test2.getData(req, res).then(function(data){
          // test of data returned
          done(); // finish test
        }).catch(done);// report about error happened
    });
});

如果您不需要在您的模块中进行任何数据处理,您可以删除整个 .then 部分而不需要任何功能更改。
但是如果你想预处理数据 - 不要忘记从每个链接的 .then 返回它。

如果您的测试库需要异步内容的 stub ,您可以使用 async/await 功能来处理它。

it('retrieve response', async function(){
  try {
    var data = await test2.getData(req, res);
    // test data here
  } catch (e) {
    // trigger test failed here
  }
});

或者 stub ,像这样:

var dbStub = sinon.stub(db, 'getConnect');
dbStub.yields(null, {query: function(){/*...*/}});

关于javascript - 我应该如何进行异步单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37368261/

相关文章:

javascript - 音频不随计时器启动

node.js - WebStorm:JavaScript 中的导入/导出语句

c++ - C++ 中的单元测试和测试代码覆盖率

ios - bamboo xcode 单元测试 - 找不到工作区

javascript - 预加载 css 背景图片,nivo slider 问题

javascript - 如何将 .zip 文件提取到 lambda 函数内的目录

javascript - 我们可以动画可见性吗?

node.js - socket.io 随机聊天室一对一

javascript - 如何在离线时使用 Sentry 记录错误?

unit-testing - dotnet 核心的无约束隔离(模拟)框架