当在 2 个连续的行中调用两次时,Faker 正在生成重复数据(Typescript)
Posted
技术标签:
【中文标题】当在 2 个连续的行中调用两次时,Faker 正在生成重复数据(Typescript)【英文标题】:Faker is generating duplicate data when called twice in 2 successive lines (Typescript) 【发布时间】:2021-12-12 10:38:12 【问题描述】:我正在使用 faker 在我的 cypress 测试中生成数据,当我调用它两次时它会生成完全相同的数据。
这是我的辅助函数:
export const generateProgram = () =>
_.cloneDeep(program);
_.set(program, 'name', faker.random.word());
_.set(program, 'email', faker.internet.email());
_.set(program, 'lockDate', moment(faker.date.future()).format('YYYYMMDD'));
_.set(program, 'lockTime', moment().format('LT'));
return program;
这是我的测试用例:
it.only('Should search for an existing program successfully', () =>
const program1 = schoolSample.generateProgram();
const program2 = schoolSample.generateProgram();
const programs = [program1, program2];
cy.log(JSON.stringify(programs))
cy.log(JSON.stringify(program1))
cy.log(JSON.stringify(program2))
app.pages.School.expandToViewPrograms(newSchool.name);
programs.forEach(program =>
cy.log(JSON.stringify(program));
app.pages.School.clickAddNewProgram();
app.pages.School.createProgram(program);
app.pages.School.clickSave();
cy.wait(1500);
);
practicumfit.commons.Search.search(program2.name);
assert.school.programListIsFilteredCorrectly(program2.name);
);
这是日志结果,它生成的数据完全相同,导致我的测试失败。
为了确保问题不在代码中的任何其他地方,我刚刚尝试了这段代码 sn-p 并且它工作正常。
const programA = schoolSample.generateProgram();
cy.log(JSON.stringify(programA));
app.pages.School.clickAddNewProgram();
app.pages.School.createProgram(programA);
app.pages.School.clickSave();
const programB = schoolSample.generateProgram();
cy.log(JSON.stringify(programB));
虽然下面的生成重复数据
const programA = schoolSample.generateProgram();
const programB = schoolSample.generateProgram();
cy.log(JSON.stringify(programA));
app.pages.School.clickAddNewProgram();
app.pages.School.createProgram(programA);
app.pages.School.clickSave();
cy.log(JSON.stringify(programB));
【问题讨论】:
Faker 在您的测试开始运行之前生成所有数据一次。我确定如果您将测试用例放在不同的describe
块中,它应该会多次重新生成数据。
@ItsNotAndy 帮助函数在不同的测试中生成不同的数据,我的问题是添加的测试用例中的前两行。这是唯一重复数据的地方。
generateProgram
克隆一个名为program
的对象,但没有将其分配给任何东西并变异然后返回原始对象对我来说似乎很可疑。以下函数还有什么作用:clickAddNewProgram
、createProgram
和 clickSave
?
@Wing clickAddNewProgram
、createProgram
和 clickSave
只是这些函数。执行 UI 操作。对于generateProgram()
,我将其用作帮助器来创建具有已定义结构的对象,这就是为什么我克隆深原始对象,更改其值并将其返回以在其他测试中使用它。
关于generateProgram
,我是说你正在克隆program
对象,但是你没有对克隆的对象做任何事情——你没有分配@987654339 的结果@对任何东西。相反,您使用set
改变您克隆的原始对象,然后返回原始对象 - 而不是克隆的对象。不确定这是您问题的原因,但对我来说很可疑。我认为您需要发布 clickAddNewProgram
、createProgram
和 clickSave
的代码,因为它们对行为有一些影响,但除非您分享代码,否则我们不会知道它是什么。
【参考方案1】:
通过将辅助函数更改为低于 1 解决了这个问题
export const generateProgram = () =>
const modifiedProgram = _.cloneDeep(program);
_.set(modifiedProgram, 'name', faker.random.word());
_.set(modifiedProgram, 'email', faker.internet.email());
_.set(modifiedProgram, 'lockDate', moment(faker.date.future()).format('YYYYMMDD'));
_.set(modifiedProgram, 'lockTime', moment().format('LT'));
return modifiedProgram;
【讨论】:
以上是关于当在 2 个连续的行中调用两次时,Faker 正在生成重复数据(Typescript)的主要内容,如果未能解决你的问题,请参考以下文章
AWS.ApiGatewayManagementApi.postToConnection() 调用一次时执行两次
UIView animationWithDuration 在调用两次时不起作用
MPMoviePlayerController 仅在调用两次时播放。仅在 iOS 4 中出现
React Navigator StackNavigator:从同一场景调用两次时 goBack 不起作用