在浏览器中运行测试时禁用 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 仅指代production
和development
环境的操作。
【讨论】:
这很混乱!特定于环境的配置来自 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 模型
使用 Postman 进行 Ember Mirage Fake API 测试
Ember Mirage 没有将模型作为 ember 对象传递