首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用postgreSQL和Tape(npm模块)对内部连接查询失败的测试

使用postgreSQL和Tape(npm模块)对内部连接查询失败的测试
EN

Stack Overflow用户
提问于 2019-09-10 22:43:02
回答 1查看 85关注 0票数 3

我有一个SQL查询,当我在我的PostgreSQL数据库中直接使用它时,它似乎工作得很好,但是我很难让它通过我的磁带测试,因为预期的输出不是我所期望的。

我已经将实际的查询粘贴到pgcli/数据库接口中,它运行得很好。

  1. 在我的findQueries.js文件中,我有以下函数:
代码语言:javascript
复制
const findAllFoodItems = cb => {
    dbConnection.query(
        'SELECT products.name, categories.name FROM products INNER JOIN categories ON products.category_id = categories.id;',
        (err, res) => {
            if (err) {
                cb(err);
            } else {
                cb(null, res.rows);
            }
        }
    )
}

module.exports = { findAllFoodItems }
  1. 我的功能测试:
代码语言:javascript
复制
test("Check findAllFoodItems queries correctly", t => {
    findAllFoodItems((err, res) => {
        if(err) {
            t.error(err, "Unable to findAllFoodItems");
            t.end();
        } else {
            const expected = [{"Banana": "Fruit"}, {"Potato": "Vegetables"}, {"Sausages": "Meat"}, {"Apple": "Fruit"}];
            t.deepEquals(res, expected);
            t.end();
        }
    })
});
  1. 当我在数据库中运行查询时,我得到了我想要的输出:
代码语言:javascript
复制
SELECT products.name, categories.name 
FROM products 
INNER JOIN categories ON products.category_id = categories.id;

产出:

代码语言:javascript
复制
+----------+------------+
| name     | name       |
|----------+------------|
| Banana   | Fruit      |
| Potato   | Vegetables |
| Sausages | Meat       |
| Apple    | Fruit      |
+----------+------------+

磁带/测试失败报告:

代码语言:javascript
复制
operator: deepEqual
      expected: |-
        [ { Banana: 'Fruit' }, { Potato: 'Vegetables' }, { Sausages: 'Meat' }, { Apple: 'Fruit' } ]
      actual: |-
        [ { name: 'Fruit' }, { name: 'Vegetables' }, { name: 'Meat' }, { name: 'Fruit' } ]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 22:51:56

第一个问题是,您的查询返回的两个列都有相同的名称(即name)。Postgres很高兴地处理这个问题,但是这可能会导致客户端的歧义,特别是当它使用列名作为键时,这里似乎就是如此。您需要将结果集中的列化名为:

代码语言:javascript
复制
SELECT products.name pname, categories.name cname FROM ...

第二个问题是你的预期结果是不正确的。您的驱动程序似乎返回一个键/值对数组,其中键是列名。因此,您应该检查以下输出:

代码语言:javascript
复制
[ 
    { pname: 'Banana', cname: 'Fruit' }, 
    { pname: 'Potato', cname: 'Vegetables' }, 
    { pname: 'Sausages', cname: 'Meat' }, 
    { pname: 'Apple', cname: 'Fruit' } 
]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57879042

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档