如何使用新的ember-cli http-mock进行API调用

red*_*r13 13 api ember.js ember-data ember-cli

我有一个简单的(迄今为止)ember-cli项目,现在只有一个带有FIXTURE数据的模型.我想模拟API的东西,无论是使用实际的JSON文件,还是使用http-mock,这是以前的ember-cli版本41的名称api-stub.

我对这一切都很陌生,所以我真的不知道如何找到人们能够api-stub工作的信息,并且看起来不像ember-cli上的任何文档都更新了http-mock信息.

我确实做了,ember generate http-mock project但我不确定从这里做什么.

这是我当前的app/router.js:

Router.map(function() {
  this.resource('projects', { path: '/' });
  this.resource('project', {path: '/project/:project_id'}, function(){
    this.resource('milestones');
    this.resource('team');
    this.resource('budget');
  });
});
Run Code Online (Sandbox Code Playgroud)

所以我有一个模板用于我的所有项目,并希望深入到一个,这需要能够与嵌套路由相关联.我的理想就像GitHub API,你可以从用户向下钻取到repo,在repo上发布问题等等.

再说一次,我还在学习ember和ember-cli的方法,所以对"为什么"以及"如何"的解释都非常受欢迎.

小智 22

我也是ember/ember-cli的新手,但我得到了一个简单的http-mock原型.生成http-mock项目后:

>ember g http-mock project
Run Code Online (Sandbox Code Playgroud)

生成器应该在项目中创建一个'server'文件夹,并在'mocks'子目录中使用project.js mock.如果你打开那个文件(server/mocks/project.js),你应该看到这样的东西:

module.exports = function(app) {
  var express = require('express');
  var projectRouter = express.Router();
  projectRouter.get('/', function(req, res) {
    res.send({project:[]});
  });
  app.use('/api/project', projectRouter);
};
Run Code Online (Sandbox Code Playgroud)

你想用你的api应该响应的json来更新res.send(...).例如:

res.send({project:{id: 1, number: 123, name: 'Fooshnickins'}});
Run Code Online (Sandbox Code Playgroud)

您可以通过运行服务器向自己证明这一点:

>ember server
Run Code Online (Sandbox Code Playgroud)

并卷曲你的api(注意内容类型):

>curl -H "ContentType:application/json" http://localhost:4200/api/project
Run Code Online (Sandbox Code Playgroud)

应回复:

{project:{id: 1, number: 123, name: 'Fooshnickins'}}
Run Code Online (Sandbox Code Playgroud)