使用TestCafe框架开发端到端测试套件。
我试图在请求URL参数上实现断言,并根据前端用例请求触发/不触发。
要测试的组件的类型是带有很多过滤器的表格“过滤器”面板。
所以我逐个测试每个过滤器,并根据每种过滤器类型对请求参数格式进行断言。
最后,我想检查一下清除过滤器时是否没有任何过滤器参数触发请求。
据我所知,如果在执行最后一个断言之前未调用记录器的“清除”方法,则此方法不应通过。但是测试实际上是绿色的。
在我看来,我似乎没有正确理解记录器的行为。包含断言机制?它是否始终仅检查最新请求?还是检查任何已记录的请求?
这是我的测试代码:
test('Transactions Base Filters', async (t) => {
// amount filter
await t.typeText(filters.grossAmountMin, '10')
.expect(filters.activeFilter.count).eql(1)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('grossAmount=10__value') > 0
))).ok()
.typeText(filters.grossAmountMax, '5')
.expect(filters.grossAmountMin.getReact(({ props: { error } }) => error)).ok()
.expect(filters.grossAmountMax.getReact(({ props: { error } }) => error)).ok()
// check invalid input does not fire a request
.expect(logger.count(r => r.request.url.indexOf('grossAmount=10__value__5') > 0)).eql(0)
.typeText(filters.grossAmountMax, '00')
.expect(filters.grossAmountMin.getReact(({ props: { error } }) => error)).notOk()
.expect(filters.grossAmountMax.getReact(({ props: { error } }) => error)).notOk()
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('grossAmount=10__value__500') > 0
))).ok();
// orderId filter
await t.typeText(filters.orderId, '8E')
.expect(filters.activeFilter.count).eql(2)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('orderId=*8E*') > 0
))).ok()
.click(filters.orderId)
.pressKey('ctrl+a delete')
.expect(filters.activeFilter.count).eql(1);
// email filter
await t.typeText(filters.customerEmail, 'fvrecord')
.expect(filters.activeFilter.count).eql(2)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('customerEmail=*fvrecord*') > 0
))).ok()
.click(filters.customerEmail)
.pressKey('ctrl+a delete')
.expect(filters.activeFilter.count).eql(1);
// status filter
await t.click(filters.status)
.click(filters.statusMenuItem('VALIDATED'))
.expect(filters.activeFilter.count).eql(2)
.expect(filters.status.getReact(({ props: { value } }) => value.length)).eql(1)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('status=VALIDATED') > 0
))).ok()
.click(filters.status)
.click(filters.statusMenuItem('REFUSED'))
.expect(filters.status.getReact(({ props: { value } }) => value.length)).eql(2)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('status=VALIDATED|REFUSED') > 0
))).ok()
.click(filters.status)
.click(filters.statusMenuItem('VALIDATED'))
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('status=VALIDATED') > 0
))).ok()
.click(filters.status)
.click(filters.statusMenuItem('REFUSED'))
.expect(filters.status.getReact(({ props: { value } }) => value.length)).eql(0)
.expect(filters.activeFilter.count).eql(1);
// transactionType filter
await t.click(filters.type)
.click(filters.statusMenuItem('DEBIT'))
.expect(filters.activeFilter.count).eql(2)
.expect(filters.type.getReact(({ props: { value } }) => value.length)).eql(1)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('type=DEBIT') > 0
))).ok();
// reset all
// logger.clear();
await t.click(filters.resetButton)
.expect(filters.activeFilter.count).eql(0)
.expect(logger.contains(r => (
r.response.statusCode === 200
&& r.request.url.indexOf('grossAmount=') < 0
&& r.request.url.indexOf('orderId=') < 0
&& r.request.url.indexOf('customerEmail=') < 0
&& r.request.url.indexOf('status=') < 0
&& r.request.url.indexOf('type=') < 0
))).ok();
});
答案 0 :(得分:2)
您可以使用logger和Node.js模块(url,querystirng)检查此最终请求中是否没有过滤器参数。例如:
.expect(logger.contains (r => r.response.statusCode == 200 && checkParameters(r.request.url)))
function checkParameters(url) {
var parsedUrl = url.parse(url):
var parsedParameters = querystring.parse(url.path);
return parsedParameters.param1 === '' && parsedParamters.param2 == '' ...
}