我有以下情况:
在测试中,我声明了一个变量
const query = {
where: { publishedCount: { inq: [2, 3] } },
};
,当我使用.constructor === Object来检查变量是否为对象时,我得到了真
console.log(query.constructor === Object); // true
在下一行中,我将相同的变量传递给函数,并且在该函数内部,比较返回 false
app.models.Group.find(query);
function find(query) {
console.log(query) // prints: where: { publishedCount: { inq: [2, 3] } },
console.log(query.constructor) // prints: function Object() {}
console.log(query.constructor === Object) // FALSE
}
我的代码在Node v8.10.0和JestRunner v23.4.2上运行。在这两种情况下,打印查询都返回正确的对象,而打印query.constructor
返回function Object() {}
我使用JSBIn进行了简单的检查,在那里比较两次返回true https://jsbin.com/wotuperode/edit?js,console
这是怎么回事?
PS。我无法更改检查对象类型的方式,因为node_modules中的一个库以这种方式进行检查
更新1
我调用的函数是find
库中的loopback
函数。此查找功能可用于您应用中的每个数据模型。
https://github.com/strongloop/loopback-datasource-juggler/blob/master/lib/dao.js#L1897
lib使用的比较在这里:https://github.com/strongloop/loopback-connector-postgresql/blob/master/lib/postgresql.js#L554 (lib将postgres连接器添加到环回)
我的完整代码
describe("Tests", () => {
it("update array of elements", async () => {
// creating objects etc
...
const query = {
where: { publishedCount: { inq: [2, 3] } },
};
await app.models.Group.find(query); // my code has await but even without await the comparison still returns false
...
// expects etc
});
});
更新2
仅当我使用 Jest 运行程序运行代码时,这才在我的测试中发生。