在浏览器中运行测试时禁用 Ember Mirage

Posted

技术标签:

【中文标题】在浏览器中运行测试时禁用 Ember Mirage【英文标题】:Disable Ember Mirage when running tests in the browser 【发布时间】:2019-09-04 08:21:22 【问题描述】:

我希望能够针对我的 Mirage 服务器以及我的实际服务器依次运行测试。

我已阅读 these docs 关于禁用 Mirage 的内容,它在开发环境中按预期工作。添加下面的代码会在 http://localhost:4200 处禁用 Mirage。

 ENV['ember-cli-mirage'] = 
    enabled: false
  ;

但是,在http://localhost:4200/tests 的浏览器中运行测试时,这不会禁用 mirage。

我已经在任何环境特定条件之外添加了上面的代码,因此它应该适用于所有环境。为了更好地衡量,我还尝试在三个特定于环境的条件中添加上面的代码:

 ENV['ember-cli-mirage'] = 
    enabled: false
  ;

if (environment === 'production') 
  ENV['ember-cli-mirage'] = 
    enabled: false
  ;

if (environment === 'development') 
  ENV['ember-cli-mirage'] = 
    enabled: false
  ;

if (environment === 'test') 
  ENV['ember-cli-mirage'] = 
    enabled: false
  ;

http://localhost:4200/tests 仍在使用 Mirage。

在浏览器中进行测试时是否可以禁用 Mirage?我希望能够轻松启用它,因此无法卸载 Mirage。

【问题讨论】:

我很惊讶这不起作用。只是想确保您正在停止服务器并再次使用ember serve 重新启动。 environment.js 文件在您重新启动服务器之前不会被重新读取。 【参考方案1】:

我误解了在验收测试中添加setupMirage(hooks); 的效果。 (docs here)

当它出现在您的验收测试中时,无论ENV['ember-cli-mirage'].enabled 是真还是假,所有请求都将进入海市蜃楼。

相反,当它不存在时,所有请求都将发送到您定义的端点,无论ENV['ember-cli-mirage'].enabled 是真还是假。

这可以解释为什么docs on enabling or disabling mirage 仅指代productiondevelopment 环境的操作。

【讨论】:

这很混乱!特定于环境的配置来自 setupMirage 存在之前的时间。好奇,你在浏览器中运行时禁用的用例是什么? @SamSelikoff 我们应用程序的用户注册系统非常复杂,用户可以看到许多不同的 UI 配置,具体取决于身份验证请求返回的内容。 Mirage 在自动测试每种情况下显示正确的 UI 方面非常出色,但 Mirage 服务器设置相当复杂,因此我们希望能够偶尔针对我们的真实服务器进行测试,以确保 Mirage 服务器响应与真实服务器响应不同步。 出于兴趣,以下是我在实践中如何处理此问题的要点:gist.github.com/andrew-paterson/…【参考方案2】:

您的代码对我来说看起来不错。正如@jrjohnson 建议的那样,重新启动服务器可能会有所帮助。如果这不起作用,像这样配置 environment.js 文件可能会有所帮助:

module.exports = function(environment) 

  let ENV = 
    'ember-cli-mirage': 
      enabled: true,
      directory: 'mirage'
    
  ;

  if (environment === 'test') 
    ENV['ember-cli-mirage'].enabled = false;
  

  return ENV;
;

【讨论】:

以上是关于在浏览器中运行测试时禁用 Ember Mirage的主要内容,如果未能解决你的问题,请参考以下文章

Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型

使用 ember-cli-mirage 测试错误响应

使用 Postman 进行 Ember Mirage Fake API 测试

Ember Mirage 没有将模型作为 ember 对象传递

Ember.js - 将 ember-cli-mirage 用于假模型时未找到模型

Ember mirage 仅在特定情况下引入延迟