javascript - 带有 http-mock 和伪装者的 Ember CLI,如何管理模拟数据

标签 javascript testing ember.js mocking

总的来说,我是 Javascript 的新手,尤其是 EmberJS 和 Ember CLI。我试图弄清楚在基于 Ember CLI 的项目中管理模拟数据的最佳实践是什么。我现在使用 0.1.14 EmberCLI。

根据 Ember CLI 文档,http-mock 是为 Ember 数据模型提供模拟数据的首选方式。所以我使用生成的 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 提示意外的保留字“export”。如果将其转换为 CommonJS 样式的 module.export,那么我将无法在集成测试中看到数据。

现在问题:

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

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

最佳答案

我不确定,但我认为 this Ember CLI addon, called ember-cli-mirage可能会做你正在寻找的东西。我自己还没有使用过它,但我听说过关于它的好消息,它似乎可以解决你想使用模拟服务器进行开发和测试而无需保留两套固定装置的情况。

关于javascript - 带有 http-mock 和伪装者的 Ember CLI,如何管理模拟数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27488451/

相关文章:

javascript - 如何在无服务器框架中使用 jquery?

javascript - 使用 jQuery 获取 Asp 控件 ID

python - 使用用户对象在 Django 中测试表单

javascript - Ember.js 如何使用 View 观察选择变化 Ember.Select multiple=true?

ember.js - Ember 是否提供一个钩子(Hook)来了解何时没有未完成的异步操作在运行?

javascript - 无法将当前 JSON 数组(例如 [1,2,3])反序列化为类型“TenantManagementWebApi.Entities.Tenant”

javascript - 单击切换回第一个选项

javascript - 在多个文件中拆分 mocha API 测试

javascript - 如何使用单个命令运行多个 QUnit (node.js) 测试文件?

ember.js - 在 JavaScript 控制台中列出所有可用的 Handlebars 模板