RequestLogger“包含”方法的预期行为

时间:2018-08-02 08:46:37

标签: javascript automated-tests devexpress end-to-end testcafe

使用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();
});

1 个答案:

答案 0 :(得分:2)

您可以使用logger和Node.js模块(urlquerystirng)检查此最终请求中是否没有过滤器参数。例如:

.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 == '' ...

}