ember-cli mocks不会返回单个记录

时间:2014-11-12 19:50:35

标签: ember.js ember-data ember-cli

我正在构建一个简单的ember-cli应用程序。我试图实现新的模拟功能。

服务器/嘲笑/ users.js

module.exports = function (app) {
  var express = require('express');
  var usersRouter = express.Router();
  usersRouter.get('/', function (req, res) {
    res.send({"users": [
      {
        "id": 1,
        "login": 'berdof'
      },
      {
        "id": 2,
        "login": 'berdof2'
      }
    ]});
  });
  app.use('/api/users', usersRouter);
};

接下来,当我尝试获取数据时,例如在浏览器中,我只需打开

http://0.0.0.0:4200/api/user/

并获取正确的数据。但是当我想要获取单个记录时,它只会抛出一个错误

Cannot GET /api/users/1

你知道为什么吗?我一直在和这个bug斗争大约2个小时。 谢谢你的帮助!祝你有个美好的一天!

更新

以下是根据@kaungst帖子修改后的答案:

module.exports = function (app) {
  var express = require('express');
  var router = express.Router();
  var dataToSend = [
    {
      id: 1,
      login: 'berdof',
    },
    {
      id: 1,
      login: 'berdof2'
    }
  ];

  router.get('/', function (req, res) {
    res.send({"users": dataToSend});
  });
  router.get('/:id', function (req, res) {
    var id = req.params.id;
    res.send({"user": dataToSend[id]});
  });
  app.use('/api/users', router);
};

2 个答案:

答案 0 :(得分:3)

你必须创建一个额外的模拟来处理这种情况

对于此特定示例运行

ember g http-mock user

应在< \ app-name> /server/mocks/user.js

中生成以下内容
module.exports = function (app) {
    var express = require('express');
    var userRouter = express.Router();
    userRouter.get('/', function (req, res) {
        res.send({"user": []});
    });
    app.use('/api/user', userRouter);
};

将其改为看起来像这样

module.exports = function (app) {
    var express = require('express');
    var userRouter = express.Router();
    userRouter.get('/', function (req, res) {
        // this part is hacky but works
        // main thing is to decide what you want to send
        // happy to update if someone knows a better solution
        var url = req.baseUrl.split('/');
        var id = parseInt(url[url.length-1]);
        var users = [{
            "id": 1,
            "login": 'berdof'
            },
            {
            "id": 2,
            "login": 'berdof2'
        }];

        res.send({"user": users[id]});
    });
    app.use('/api/user/:id', userRouter);
};

答案 1 :(得分:0)

更好的替代http-mocks

我建议使用ember-cli-mirage进行客户端开发和测试。 项目网站提供了足够详细的文档

<强>优势

  • 它创建一个支持所有CRUD操作的内存数据库。
  • 使用相同的数据进行开发和测试。
  • faker.js很好地集成以创建随机数据。
  • 创建灯具的能力。

在努力使用http-mocks时,我强烈推荐它。