【问题标题】:ember-cli-mirage testing request paramsember-cli-mirage 测试请求参数
【发布时间】:2015-12-18 22:30:43
【问题描述】:

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

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

将在其他地方打开与此故障相关的另一个问题并将其链接到 cmets。

【问题讨论】:

    标签: ember.js ember-cli-mirage


    【解决方案1】:

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

    • request.params,你的路线动态段
    • request.queryParams,反序列化查询请求参数
    • request.requestBody,正文,你可以用JSON.parse(request.requestBody)把它变成一个对象。

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

    【讨论】:

    • 感谢您的回复,山姆!我会试一试。并感谢伟大的工具。 Mirage 使测试 ember 变得更加容易。
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-13
    • 2016-04-03
    相关资源
    最近更新 更多