【问题标题】:How to spy on a Falcor Data Model constructor in Jasmine 1如何在 Jasmine 1 中监视 Falcor 数据模型构造函数
【发布时间】:2017-10-22 16:58:34
【问题描述】:

我正在尝试模拟 require('falcor'); 返回的构造函数我有两条路线,一条使用 var dataModel = new falcor({source: this}); 调用另一条路线

代码是这样的

var falcor = require('falcor');
module.exports = {
    route: 'items',
    get: function (pathSet) {
        var dataModel = new falcor({source: this});
        var ids = '1';
        dataModel.get('itemIds', ids).then(function (response) {
            // Code I can't get to in Jasmine 1.x tests
        });
    }
}

我希望构造函数返回一个间谍,以便我可以调用Promise.resolve 并发送回模拟数据以进行测试。如果不将调用移动到另一个我可以单独模拟的模块中,我不确定如何做到这一点。我认为一些可能对我有帮助的问题是

  1. 在哪里可以找到 falcor 等模块定义的构造函数?我曾尝试调查“全球”对象,但没有运气。如果我确实找到了这个构造函数,我可以用spyOn(global, 'falcor').andReturn(/* object with a mocked get method*/); 替换它吗?
  2. 有没有更好的方法让测试更容易从另一个路由内部调用一个路由?

感谢您的帮助。

【问题讨论】:

    标签: falcor


    【解决方案1】:

    从问题 2 开始:是的,要从另一个路由获取数据,请将 refs 返回到该路由。不要用路由实例化另一个模型。例如

    const itemsRoute = {
      route: 'items[{keys:indices}]',
      get(pathSet) {
        // map indices to item ids, likely via DB call
        // in this case, SomeDataModel handles network requests to your data store and returns a promise
        return SomeDataModel.getItemsByIndices(pathSet.indices)
          .then(ids => ids.map((id, idx) => ({
            path: ['items', pathSet.indices[idx]],
            value: {
              $type: 'ref',
              value: ['itemById', id]
            }
          })));
      }
    };
    
    const itemByIdRoute = {
      route: 'itemById[{keys:ids}].name',
      get(pathSet) {
        return new Promise((resolve) => {
          resolve(pathSet.idx.map(id => ({
            path: ['itemById', id, 'name'],
            value: {
              $type: 'atom',
              value: `I am item w/ id ${id}`
            }
          })));
        });
      }
    };
    

    当一个请求进入(例如)[items, 2, name] 时,它将命中第一个items 路由,将[items, 2] 解析为[itemById, someId],并解析itemsById 路由中剩余的name 键。

    至于问题 1:不要模拟 falcor,只需模拟您用来远程调用数据源的任何内容。在上述情况下,只需模拟SomeDataModel

    【讨论】:

      猜你喜欢
      • 2012-03-09
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-24
      • 2022-09-30
      相关资源
      最近更新 更多