最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何在Node.js的Sequelize Mock中编写Sequelize.js原始查询的测试用例

网站源码admin15浏览0评论

如何在Node.js的Sequelize Mock中编写Sequelize.js原始查询的测试用例

如何在Node.js的Sequelize Mock中编写Sequelize.js原始查询的测试用例

我无法理解使用Sequelize Mock在sequelizejs中为原始查询编写测试用例。

我的函数,成功返回200状态的优惠券对象

try {
    const domain = req.params.domain;
    const domainFilter = { domain: { [Op.eq]: req.params.domain } };
    const merchant = await models.merchants.findOne({ where: domainFilter });
    if (merchant) {
        const coupons = await models.sequelize.query(`SELECT * FROM coupons LEFT JOIN coupon_activities ON coupons.coupon=coupon_activities.coupon WHERE coupons.domain='${domain}' ORDER BY coupon_activities.best_discount DESC, coupon_activities.worked DESC, coupons.expire_date DESC LIMIT 50`, { type: sequelize.QueryTypes.SELECT });
        if (coupons && coupons.length > 0) {
            const keys = [...new Set(coupons[0].map(el => el.coupon))]
            const filteredCoupons = coupons[0].filter(el => {
                if (keys.indexOf(el.coupon) !== -1) {
                    keys.splice(keys.indexOf(el.coupon), 1)
                    return true;
                } else {
                    return false;
                }
            });
            res.status(200).send({ coupons: filteredCoupons });
        } else {
            res.status(204).send({ response: "No Coupons" });
        }
    } else {
        res.status(204).send({ response: "No Content" });
    }
} catch (err) {
    console.log(err);
    res.status(500).send({ response: "Error in server" });
}

功能测试用例

describe('Get Coupons By Merchand Id', () => {
    it('It got all coupons of a merchant', (done) => {
        const merchant_id = 1;
        chai.request(server)
        .get('/api/coupons/' + merchant_id)
        .end((err, res) => {
            res.should.have.status(200);
            res.body.should.be.a('object');
            res.body.should.not.have.property('errors');
            res.body.coupons.length.should.not.equal(0);
            res.body.coupons[0].merchant_id.should.be.equal(merchant_id);
        done();
        });
    });
});

模拟我已设置

'use strict';
const dbMock = require('./sequelize_mock');
const Op = dbMock.Op;

let SequelizeMock = dbMock.define("sequelize", {
  merchant_id: 1,
  domain: 'amazon',
  coupon: 'TESTCOUPON',
  description: 'This is a test',
  expiry_date: '12-12-9999', 
}, {
  indexes: [{ fields: ['merchant_id'] }],
  createdAt: false,
  updatedAt: false,
  id: false,
  tableName: 'coupons',
});

SequelizeMock.$queryInterface.$useHandler(function(query, queryOptions, done) {
  console.log('TCL: query', query)
    console.log('TCL: queryOptions', queryOptions)
});

module.exports = SequelizeMock;

但是它无法正常工作,给我一个错误,有人可以帮助我正确设置此模拟,以便我可以根据查询或有效的方法发送回数据。

当前未定义错误序列化

回答如下:

同样,我搜索sequelize-mock文档,但与此无关。但是我在github上找到了这个例子:

如果使用的是sequelize.query()函数,则可以排队从该函数返回的模拟序列对象的结果也一样与模型一样,您只需要使用。$ queueResult()方法。 -来自用户:LoveAndCoding

https://github/BlinkUX/sequelize-mock/issues/53

发布评论

评论列表(0)

  1. 暂无评论