返回Mirage.Response对象与通过Mirage返回原始JSON对象有什么区别?

时间:2016-08-26 14:05:40

标签: json unit-testing ember.js mocking ember-cli-mirage

我正在尝试在浏览器中构建一个EmberJS测试服务器。我有一个API调用“myApiMethod”,我试图获取一个JSON对象。在尝试测试特定方法的响应时,我发现我可以返回原始json对象,或将其包装在Mirage.Response对象中。由于我希望模拟服务器的响应能够反映现实世界,我不确定这两者中的哪一个是更好的主意。

我想知道的是我在Mirage的config.js中的以下两个代码块之间的功能差异:

版本1:

    this.get('/myApiMethod', function(param1, param2){
        var jsonObject = myFunctionThatReturnsJson(param1, param2);
        return jsonObject;
    });

VS

版本2:

    this.get('/myApiMethod',function(param1, param2){
        var jsonObject = myFunctionThatReturnsJson(param1, param2);
        return Mirage.Response(200, {}, jsonObject); 
    });

1 个答案:

答案 0 :(得分:2)

Mirage使用Pretender.js来伪造XHR回应。 Pretender本身对响应类型不公开,因此在使用JSON进行响应时,您需要手动对其进行字符串化。以下是文档中的示例:

this.get('/photos/:id', function(request) {
  return [200, {"Content-Type": "application/json"}, JSON.stringify(PHOTOS[request.params.id])]
});

Mirage最初的决定之一是假设大多数时候,人们都希望用JSON做出回应。因此,Mirage中的路由处理程序允许您返回纯JavaScript对象:

this.get('/photos/:id', () => {
  return [{ id: 1, url: 'lorempixel.com/100/100' }];
});

和Mirage负责对响应进行字符串化并设置相应的ContentType标头。

为想要自定义响应的人添加了Mirage.Response对象,要么使用不同的内容类型进行响应,要么更改标题,要么使用与给定谓词的默认值不同的HTTP响应代码。 / p>

简而言之,如果您需要的不是默认行为,请使用Mirage.Response