angular 首页问题
查问参数不起作用,这个问题是学长解决的,但感觉有必要记录一下
查问时机器人治理连贯状态不起作用
在 mockApi 中打印承受到的参数,查看控制台,发现传过来的连贯状态参数为空
查问时的过程
点击查问后执行 onSubmit()办法
onSubmit(queryForm: FormGroup): void {this.reload({...this.params, ...queryForm.value});
}
onSubmit()执行 reload()办法
/**
* 查问
* @param params page: 当前页 size: 每页大小
*/
reload(params: Params): void {
// 将参数转换为路由参数
const queryParams = CommonService.convertToRouteParams(params);
console.log('queryParams',queryParams);
this.router.navigate(['./'],
{
relativeTo: this.route,
queryParams: queryParams,
}).then();}
/**
* 将参数转换为路由参数
* @param params 参数
* @return 实用于 route 的 Params
*/
public static convertToRouteParams(params: { [header: string]: string | string[] | number | number[] | null | undefined; })
: {[header: string]: string | string[];} {const queryParams = {} as {[header: string]: string | string[];};
// 过滤掉 undefined 及 null 的数据
for (const key in params) {if (params[key] !== undefined) {const value = params[key];
if (value !== undefined || value !== null) {if (typeof value === 'string') {if (value.length > 0) {queryParams[key] = value;
}
} else if (typeof value === 'number') {queryParams[key] = value.toString();} else if (Array.isArray(value)) {queryParams[key] = [];
(value as []).forEach(v => {if (typeof v === 'number') {(queryParams[key] as string[]).push((v as number).toString());
} else {(queryParams[key] as string[]).push(v);
}
});
}
}
}
}
return queryParams;
}
在这个办法中并没有对 boolean 值得解决,所以传过来的 boolean 值间接被过滤掉了, 而我在抉择组件中恰好将类型申明为了 boolean,这就导致了这样的问题。
批改后解决
另一个问题,在另一个首页的组件中因为没有加上面的代码导致刷新或切换页面后查问参数隐没。
这个比拟奇怪,就是加了这几行代码在单元测试是如果刷新或者查问的话查问参数会间接隐没。
然而如果不加的话在单元测试就不会有这个问题
所以过后一时冲动就给删了
然而起初认真想一下忽然就明确了,如果我加上依据路由参数初始化 formControl 的代码,我在每次单元测试时传的参数都是空的,所以点击查问时天然不会保留数据,但我仍然不太明确为什么我不加那一串代码的话点击查问后查问参数会被保留,猜想是因为 angular 并没有检测到这几个值得变动,所以在点击查问后 没有从新加载查问的表单。
简略捋一下首页的流程
学习 springBoot 一些问题
在写单元测试遗记加注解导致问题
因为引入的包谬误导致的问题
单元测试一些不太好了解的代码
学习 springboot 后发现 springboot 的单元测试比 angular 的更为简单,汪汪测试的代码比理论实现性能的代码更多,springboot 的单元测试也更为简单。
@Test
public void save() throws Exception {
String url = "/Klass"; // 申请路由
MockHttpServletRequestBuilder
// 结构 post 申请
postRequest = MockMvcRequestBuilders.post(url)
.contentType("application/json;charset=UTF-8") // 数据格式
.content("{\"name\":\" 测试单元测试班级 \"}") ; // 申请内容
// 发动 post 申请
this.mockMvc.perform(postRequest)
.andDo(MockMvcResultHandlers.print()) // 打印后果
.andExpect(MockMvcResultMatchers.status().is(201));// 断言
}
当对 studentService 发动申请且申请的类型为 Student 时返回 returnStudent
Mockito.when(
studentService.save(Mockito.any(Student.class)))
.thenReturn(returnStudent);
logger.info("新建参数捕捉器");
// 初始化一个能够捕捉 Student 类型变量的捕捉器
ArgumentCaptor<Student> studentArgumentCaptor = ArgumentCaptor.forClass(Student.class);
// 当调用 studentService.save 办法时,应用 studentArgumentCaptor.capture()来捕捉参数的值
Mockito.verify(studentService).save(studentArgumentCaptor.capture());
// 获取参数捕捉器的值
Student passedStudent = studentArgumentCaptor.getValue();