我有从路由添加到搜索请求的默认参数。我想在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
要在其他地方打开与此失败相关的其他问题,并将其链接到评论中。
答案 0 :(得分:4)
传递给路由处理程序的request
param是PretenderJS请求对象,它有一些有用的键:
request.params
,路线的动态细分request.queryParams
,反序列化查询请求参数request.requestBody
,文本正文,您可以使用JSON.parse(request.requestBody)
将其转换为对象。因此,如果您想对查询参数断言,请使用request.queryParms
。