node.js - 为什么 findAll() 不返回模型中的所有对象?
问题描述
我正在模拟数据库,因为我正在单元测试 API。对于模拟,我使用 sequelize-mock 库,对于模型,我使用 sequelize。当我调用 GET 请求时,函数 getAll() 仅返回该数组中的第一个元素。
我的模拟模型:
const assetmeter = (sequelize) => {
const AssetMeter = sequelize.define('assetmeter', {
id: 1,
assetId: 1,
sequence: null,
meterName: 'BAD',
measureUnit: 'km',
meterType: 'CHARACTERISTIC',
description: 'test description',
active: true,
},{
id: 2,
assetId: 2,
sequence: null,
meterName: 'TEST',
measureUnit: 'TEST',
meterType: 'TEST',
description: 'TEST',
active: true,
});
return AssetMeter;
}
module.exports = assetmeter;
获取所有功能:
import { AssetMeter } from '../../models';
import paginate from '../../utils/paginate';
export default async (req, res) => {
let assetMeters = [];
try {
assetMeters = await AssetMeter.findAndCountAll({
limit: req.pagination.limit,
offset: req.pagination.offset
});
console.log(assetMeters);
} catch (err) {
console.log(err);
return res.status(500).send({ error: 'Internal server error' });
}
const links = paginate(req.protocol, req.hostname, req.baseUrl, req.pagination, assetMeters.count);
if (links) {
res.set('Link', links);
}
return res.set('X-Total-Count', assetMeters.count).send(assetMeters.rows);
};
我期望的输出是它将返回数组中的两个对象。当前结果:
[ { id: 1,
assetId: 1,
sequence: null,
meterName: 'BAD',
measureUnit: 'km',
meterType: 'CHARACTERISTIC',
description: 'test description',
active: true,
createdAt: '2019-03-29T07:33:02.812Z',
updatedAt: '2019-03-29T07:33:02.812Z' } ]
解决方案
恐怕这是预期的输出,我认为您使用define
错误的方式。有2件事。
首先,方法签名是:
define(name, [obj={}], [opts]) -> Model
您正在传递 3 个参数,但只有第 2 个是有效的。它是一个包含默认值的对象AssetMeter
。因此第三个参数被忽略,因为它应该是opts
.
其次,您试图用许多来填充您的模拟,AssetMeter
但为此您需要插入(创建)它们。同样,第二个参数是(id、assetId 等)属性的默认值。AssetMeter
这就是为什么您findAll
只返回 1 个结果,它是一个具有此类默认值的对象。
如果您想要 2 个对象,我认为最好的方法是使用以下方法模拟查询$queueResults
:
const DEFAULT_VALUE: { /*...*/ };
const assetmeter = (sequelize) => {
const AssetMeter = sequelize.define('assetmeter', DEFAULT_VALUE);
AssetMeter.$queueResult([UserMock.build(), UserMock.build(), /* ... */]);
return AssetMeter;
}
module.exports = assetmeter;
看看文档:https ://sequelize-mock.readthedocs.io/en/stable/docs/mock-queries/#queued-results 。
我希望这有帮助!
推荐阅读
- javascript - 当我从 jquery 数据表中删除数据时,它仍然显示在网格中,直到刷新
- flutter - 从颤振构建生成的 .app 文件是 300+ MB
- c - 如何调整由函数创建的 char 数组中的内存大小?
- r - How do I update the centre value for get_googlemap in the ggmap package?
- generics - 带有返回 impl trait 的通用函数的“借来的值不够长”
- reactjs - 设置 react-styleguidist、创建 React App、Typescript、Material UI 和 styled-components
- unit-testing - 如何编写带有数据获取的单元测试,根据 vuejs 中的响应更改数据?
- css - 背景图像在 github 页面上不起作用
- angular - Is it possible to add property dynamically to groupform
- c - 无法在 c 编程中使用正则表达式匹配 \r 和 \n