带有http-mock和pretender的Ember CLI,如何管理模拟数据

时间:2014-12-15 16:21:23

标签: javascript testing ember.js mocking

我是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会抱怨意外的保留字“export”。如果将它转换为CommonJS样式的module.export,那么我无法在集成测试中看到数据。

现在问题:

  1. 我认为如果Broccoli将ES6模块编译成CommonJS格式,它应该与http-mock一起使用,但我不知道该怎么做。这是正确的方向,以及如何?
  2. 我是否必须在同一个项目中使用http-mock和Pretender?我可以使用一个进行开发和集成测试吗?
  3. 我被困在这里,评论,建议和代码示例非常感谢。

1 个答案:

答案 0 :(得分:1)

我不确定,但我认为this Ember CLI addon, called ember-cli-mirage可能会做你正在寻找的事情。我还没有自己使用它,但我听说过它的好处,它似乎照顾了你想要使用模拟服务器进行开发和测试而不需要保留两套灯具的情况。