如何在同一个测试用例中多次使用sequelize-mock变量

问题描述 投票:0回答:0

对于这个项目,我使用

MySQL DB
Sequelize
ORM。为了进行测试,我使用了
mocha
chai
sinon
模块。

我有一个

User
模型和方法
createUser
。我正在尝试使用
sequelize-mock
来模拟用户数据。这是代码片段:

const SequelizeMock = require("sequelize-mock");
const dbMock = new SequelizeMock();
const userMock = dbMock.define("users");

// Mocking multiple records in a single mock
// Reference - github.com/BlinkUX/sequelize-mock/issues/55#issuecomment-383311654

userMock.$queueResult([
  userMock.build({
    id: 1,
    userName: "Superman"
  }),
  userMock.build({
    id: 2,
    userName: "Batman"
  })
]);

describe("createUser test", () => {
  it("creates user", async () => {
    console.log(`--------------- 1 -----------------`);
    let allUsers = await userMock.findAll();
    console.log(`allUsers = ${JSON.stringify(allUsers)}`);
    expect(allUsers.length).to.equal(2);

    console.log(`--------------- 2 -----------------`);
    allUsers = await userMock.findAll();
    console.log(`allUsers = ${JSON.stringify(allUsers)}`);
    expect(allUsers.length).to.equal(2);
    console.log(`--------------- 3 -----------------`);
  });
});

但是

userMock.findAll()
只工作一次。这是相同的控制台日志:

createUser test
--------------- 1 -----------------
allUsers = [{"id":1,"userName":"Superman","createdAt":"2020-01-01T09:36:48.286Z","updatedAt":"2020-01-01T09:36:48.286Z"},{"id":2,"userName":"Batman","createdAt":"2020-01-01T09:36:48.286Z","updatedAt":"2020-01-01T09:36:48.286Z"}]
--------------- 2 -----------------
allUsers = [{"id":1,"createdAt":"2020-01-01T09:43:35.030Z","updatedAt":"2020-01-01T09:43:35.030Z"}]

这是我的问题:

  1. 为什么多次调用时allUsers的值不同?
  2. 如何多次使用同一个userMock?以下情况需要这样做。为了测试更新功能,我需要使用
    findOne()
    并更新一个用户记录的数据(存在于 userMock 中)。然后我需要再次使用 findOne() 找到更新的记录。

PS - Github 测试回购 URL - https://github.com/shrirambalakrishnan/sequelize-mock-test。 您可以运行

npm test
来运行测试并查看控制台日志。

node.js mocking sequelize.js mocha.js sinon
© www.soinside.com 2019 - 2024. All rights reserved.