ember-cli-mirage测试请求参数

时间:2015-12-18 22:30:43

标签: ember.js ember-cli-mirage

我有从路由添加到搜索请求的默认参数。我想在ember-cli-mirage中测试这些,但我仍然坚持如何捕获请求或requestBody以便我可以断言它。

正在寻找类似于我在this SO post上找到的内容,但需要访问实际请求而不是DOM。我可以使用currentUrl()访问用户输入的搜索参数(我的示例中的文本' param),但是发送到服务器的请求中包含的默认参数,而不是url。

有没有办法使用ember-cli-mirage捕获和断言请求本身?

这样的东西
test('it appends default params to request'), function(assert) {
  let searchUrl = '/my/route/url';

  server.get(searchUrl, (db, request) => {
    assert.equal(request.requestBody, "text=abc&all=true");
  }
});

修改

我能够使用Qunit的异步助手来测试通过,如下所示:

test('it appends default params to athlete request', function(assert) {
  assert.expect(2);
  let done = assert.async();

  server.get('/athletes', (db, request) => {
    let params = request.queryParams;
    assert.equal(params["page"], "1");
    assert.equal(params["per"], "50");
    done();
  });

  server.create('athlete', {first_name: 'John'});
  visit('/athletes');
});

此测试的控制台中仍然出现与json:api序列化相关的错误:

normalizeResponse must return a valid JSON API document:
        * meta must be an object

要在其他地方打开与此失败相关的其他问题,并将其链接到评论中。

1 个答案:

答案 0 :(得分:4)

传递给路由处理程序的request param是PretenderJS请求对象,它有一些有用的键:

  • request.params,路线的动态细分
  • request.queryParams,反序列化查询请求参数
  • request.requestBody,文本正文,您可以使用JSON.parse(request.requestBody)将其转换为对象。

因此,如果您想对查询参数断言,请使用request.queryParms