Ember CLI with http-mock and pretender, 如何管理模拟数据

Ember CLI with http-mock and pretender, how to manage mock data

本文关键字:管理 数据 模拟 何管理 with CLI http-mock and pretender Ember      更新时间:2023-09-26

我是Javascript的新手,尤其是EmberJS和Ember CLI。我试图找出在基于 Ember CLI 的项目中管理模拟数据的最佳实践是什么。我现在在 0.1.14 EmberCLI 上。

根据 Ember

CLI 文档,http-mock 是为 Ember Data 模型提供模拟数据的首选方式。所以我使用生成的 http-mock 并向其中添加了一些测试数据。

  var testData = [
  ...
  ];
  module.exports = function(app) {
    var express = require('express');
    var todosRouter = express.Router();
    todosRouter.get('/', function(req, res) {
      res.send({
        "todos": testData
      });
    });

然后我发现 http-mock 在集成过程中不起作用,所以我添加了 Pretende。

  import Ember from 'ember';
  import { test } from 'ember-qunit';
  import Pretender from 'pretender';
  import startApp from '../helpers/start-app';
  var App;
  var server;
  var testData = [
    ...
    ];
  module('An Integration test', {
    setup: function() {
      App = startApp();
      server = new Pretender(function(){
        this.get('/api/todos', function(request){
           return [ 200, {"Content-Type": "application/json"},
                    JSON.stringify({'todos': testData) ];
        });
      });
    },
    teardown: function() {
      ...
    }
  });

  test('3 items loaded at startup', function() {
  ...
  });

http-mock 和集成测试都工作正常,然后我尝试将测试数据放在一个单独的模块中,以便可以共享它们。问题是集成测试使用 ES6 风格的模块导入,而 http-mock 使用 CommonJS 风格的模块定义,我不知道如何将它们组合到项目中。

如果我将数据构造到 ES6 模块中,

var mockData = [
...
];

export default {
  all: mockData
};

它适用于集成测试,但 HTTP-mock 抱怨意外的保留字"导出"。如果将其转换为 CommonJS 样式的 module.export,那么我在集成测试中看不到数据。

现在的问题:

  1. 我认为如果 Broccoli 将 ES6 模块"编译"为 CommonJS 格式,它应该与 http-mock 一起使用,但我不知道该怎么做。这是正确的方向吗,如何前进?
  2. 我必须在同一项目中同时使用 http-mock 和 Pretender 吗?我可以同时使用一个进行开发和集成测试吗?

我被困在这里,非常感谢评论、建议和代码示例。

不确定,但我认为这个名为 ember-cli-mirage 的 Ember CLI 插件可能会做你正在寻找的东西。 我自己还没有用过它,但我听说过关于它的好事,它似乎可以处理你想使用模拟服务器进行开发和测试而不保留两套夹具的情况。