2017-02-21 63 views
0

我们有应用程序使用Pretender为测试提供灯具。现在我们正在尝试迁移到ember-cli-mirage。我们不能一次移动所有的灯具。所以基本上发生的是我们正在创建自己的Pretender服务器,并且ember-cli-mirage正在启动它自己的服务器。 Whic呈现以下警告:传统应用程序中的余烬 - 海市蜃楼

您创建了第二个Pretender实例,但已经有一个运行。一次运行两个Pretender服务器将导致意外的结果,并将在未来的主要版本中完全删除。请在您的实例中调用.shutdown(),而不再需要它们作出响应。

既然这只是一个警告,它不应该是一个过渡期的问题。问题是,一旦幻影载入我们的应用程序,旧的伪装者路线停止响应。我想这就是“......会导致意想不到的结果”所指的。

任何运行ember-cli-mirage与手动创建的伪装者路线一起的机会?或者只是使用Mirage服务器并在那里注入这些路线?

回答

1

我会使用Mirage的服务器,然后在它里面加载你的Pretender路由。 (Mirage的服务器实际上只是一个对象,new是一个Pretender实例)。如果人们看到mirage文件夹,他们可能会期望在那里定义路线。此外,Mirage在测试期间清理了Pretender实例。

mirage/config.js你可以导入你现有的Pretender路由并在那里打电话给他们。幻影对伪装的顶部糖,但你总是可以通过this.pretender访问config函数内的基本伪装实例:

// mirage/config.js 
import setupYourOldRoutes from 'somewhere'; 

export default function() { 
    this.get('users'); // new Mirage shorthand 

    setupYourOldRoutes(this.pretender); 
} 

所以setupYourOldRoutes可能是一个函数,它接受一个伪装实例,然后使用定义了所有现有的路由处理程序它。

+0

谢谢!推动我纠正方向。 –

0

基于@samselikoff答案我找到了我的案例的解决方案。我们已经有一个中心点,那就是处理伪装者实例的创建。因此,修复只是通过幻影的伪装,而不是创建新的:

// somewhere.js 
export default function() { 
    // initPretender: function() { 
    // this.pretender = new Pretender(); 
    // } 
    initPretender: function (pretender) { 
    this.pretender = pretender; 
    }, 
    getPretender: function() { 
    return this.pretender; 
    } 
} 

// mirage/config.js 
import pretenderWrapper from 'somewhere'; 

export default function() { 
    this.get('users'); // new Mirage shorthand 

    pretenderWrapper.initPretender(this.pretender); 
} 

棘手的部分是确保initPretender()被称为我们的任何遗留代码之前试图调用getPretender()。我认为通常这不是一个麻烦。在我们的例子中,我们修补了tests/helpers/start-app.js,以便在每次测试中注入一些固定装置。这导致太早致电getPretender()

+0

非常具体的解决方案,坚持具体问题。如果有人遇到类似问题,请在这里发帖。 –