route.js多步骤执行时this变量值残留问题求助
问题原因
你导出的是ABC类的单例实例,所有测试步骤复用同一个对象,append方法每次都会在当前this.path的基础上追加字符串,导致第二次执行时叠加了第一次的拼接结果。
解决方案
以下几种方法都能解决这个问题:
方法1:基于基础URL重新拼接(推荐)
把原始apiUrl存为独立的实例属性,每次append时都从基础URL开始拼接,避免依赖当前path的旧值:
// Route.js import { route } from xxxx; class ABC extends Route { constructor() { super(); this.baseUrl = apiUrl; // 保存初始基础URL this.path = apiUrl; } append(var1, var2) { // 每次都从baseUrl重新生成路径 this.path = this.baseUrl + var1 + var2; } } export new ABC Object;
方法2:避免单例,每次创建新实例
不要导出单例对象,而是导出ABC类本身,在每个测试步骤中创建新的实例:
// Route.js import { route } from xxxx; class ABC extends Route { constructor() { super(); this.path = apiUrl; } append(var1, var2) { this.path = this.path + var1 + var2; } } export default ABC; // 导出类,而非实例
在步骤实现中每次创建新实例:
// 步骤逻辑示例 Given('I execute {string} and {string}', function(var1, var2) { const abc = new ABC(); abc.append(var1, var2); // 后续使用abc.path发起API请求 });
方法3:增加路径重置方法
在ABC类中添加重置path的方法,每次执行测试步骤前调用:
// Route.js import { route } from xxxx; class ABC extends Route { constructor() { super(); this.baseUrl = apiUrl; this.path = apiUrl; } append(var1, var2) { this.path = this.path + var1 + var2; } resetPath() { this.path = this.baseUrl; // 重置为初始URL } } export new ABC Object;
在步骤执行前先重置路径:
// 步骤逻辑示例 Given('I execute {string} and {string}', function(var1, var2) { abc.resetPath(); // 先清空旧路径 abc.append(var1, var2); // 后续使用abc.path发起API请求 });
验证结果
采用以上任意一种方法后,第二次执行测试步骤时this.path都会是apiUrlxyzhij,符合预期。
内容的提问来源于stack exchange,提问作者kkrfan1988
相关产品推荐
相关产品推荐

