gpt4 book ai didi

javascript - npm Module Faker 在调用时不会创建不同的数据

转载 作者:行者123 更新时间:2023-11-28 21:16:16 24 4
gpt4 key购买 nike

我正在创建一个 API 测试框架并使用 faker 创建假用户以发布到 API。

我正在测试两个端点,创建用户和创建提醒,我将数据发布到这两个端点。

要创建一个用户,我需要将姓名、电子邮件和密码发布到用户端点,然后我会取回一个有效的 JWT。

要创建提醒,我需要一个有效的 JWT,我将其发布在创建提醒调用的 header 中。

我有一个帮助函数,可以为我创建一个用户 json 对象,我在创建用户和创建提醒端点中都使用了它。

如果我单独运行每个测试,测试就会通过。但是,如果我尝试运行我的全套测试,我的验证在创建用户端点上失败,因为电子邮件已经存在,它是在我调用创建提醒时创建的(因为这也会调用创建用户来获取有效 token )

这是我创建有效用户的测试 -

const validUser = require('../data/userData/validUser');

describe('Functional Testing', () => {
describe('Users', () => {
it('It should create a user', async () => {
const response = await usersService.createUser(validUser);
expect(response.statusCode).to.equal(200);
expect(response.body).to.not.be.null;
expect(response.body).to.have.deep.property('token');
});
});
});

这里是使用用户服务获取token的提醒测试

context('Functional Testing', () => {
describe('Reminder', () => {
it.skip('It should create a reminder', async () => {
const createUserResponse = await user.createUser(validUser);
const token = createUserResponse.body.token;

const response = await reminderService.createReminder(
validReminder,
token
);

expect(response.statusCode).to.equal(201);
expect(response.body).to.have.deep.property('success');
expect(response.body).to.deep.include({ success: 'reminder created' });
});

这是我创建用户的模块 -

const faker = require('faker');

module.exports = {
name: 'Test User',
email: `${faker.internet.email()}`,
password: '123123'
};

我本以为无论如何,createUser 模块总是会给我创建一封随机电子邮件,但我认为测试可能运行得太快了,以至于 faker 无法生成新的随机电子邮件?

如何让 Faker 始终生成随机用户?

最佳答案

你至少有两个选择:

  1. 您使有效的用户模块从缓存中移除
  2. 您为您的用户使用 setter/getter

使模块失效

一个模块可以被要求十几次,但它只会导出一次。任何带有它的数据都将执行一次,包括伪造的电子邮件。

但是,使用 CommonJS,您可以从缓存中删除模块:

const vuPath = require.resolve('../data/userData/validUser');
console.log(require(vuPath));
console.log(require(vuPath));
// same result ... now
delete require.cache[vuPath];
console.log(require(vuPath));
// different email

这要求您每次都使用户无效,或者您拆除无效并在设置时重新分配 validUser

使用 setter/getter

const faker = require('faker');

module.exports = {
name: 'Test User',
get email() { return faker.internet.email(); },
password: '123123'
};

在这种情况下,每次访问 user.email 时,用户都会收到不同的电子邮件。

关于javascript - npm Module Faker 在调用时不会创建不同的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57779144/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com