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

Posted

技术标签:

【中文标题】Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型【英文标题】:Computed properties in Ember data models not available from ember-cli-mirage models 【发布时间】:2018-03-15 16:38:58 【问题描述】:

我尝试使用 ember-cli-mirage 进行测试。我有很多带有计算属性的 Ember 数据模型。当我创建 Mirage 模型实例时,似乎计算属性不可用。我想知道是否有办法让计算属性有效?

// app/models/profile.js
import DS from 'ember-data';

export default DS.Model(
  firstName: attr('string'),
  lastName: attr('string'),

  fullName: computed('firstName', 'lastName', function() 
    // return ...
  )
);
// Create profile instance...
let profile = server.create('profile',  firstName: 'Tom', lastName: 'Stran' );
profile.firstName // Tom
profile.lastName  // Stran
profile.fullName // undefined
profile.get('fullName') // profile.get is not a function

谢谢!

【问题讨论】:

【参考方案1】:

您没有犯错 - Mirage 模型不会继承您的 Ember Data 模型的计算属性。我知道这很令人困惑,而且您肯定不是第一个问为什么的人。

Mirage 模型被称为“模型”,因为在大多数系统(前端和后端)中,模型一词的意思是“包装一些数据的对象”。尽管 Mirage 旨在与 Ember 一起使用,但 Mirage 实际上对您的 Ember 应用一无所知。

Mirage 有自己的“数据库”(一个 javascript 对象)和 ORM。模型方便您使用适合您开发和测试 Ember 应用程序的数据“为您的服务器播种”。因此,就像您的 Ruby 模型无法访问您的 Ember Data 计算属性一样(例如,如果您的服务器是用 Rails 编写的),您的 Mirage 模型也存在于一个孤立的环境中。

在最新版本中,Mirage 能够查看您的 Ember Data 模型并为自己的架构复制它们的关系。但这只是一种方便,仅用于 Mirage 的引导过程。

让我知道这是否解决了问题,或者如果您还有其他问题!

【讨论】:

以上是关于Ember 数据模型中的计算属性不适用于 ember-cli-mirage 模型的主要内容,如果未能解决你的问题,请参考以下文章

在将查询响应分配给模型字段时丢失大量的ember-data类属性

如何在 Ember 模型单元测试中检查属性属性类型?

Ember Docs - Readonly嵌套数据

更改记录时,DS 模型记录上的 Ember 计算属性未触发

在ember中运行时创建模型属性

Ember 验收测试不适用于 AJAX