如何用Jasmine测试这个Ember-Data模型?

时间:2013-04-20 13:38:05

标签: ember.js jasmine ember-data

这些是我测试的第一步,因此我不知道如何处理它。 在制作时我使用REST适配器 - 开发时的灯具。

例如,拥有此用户模型:

Sks.User = DS.Model.extend
  name: DS.attr("string")
  email: DS.attr("string")

  gravatar: Ember.computed(->
    email = @get("email") || ""
    "http://www.gravatar.com/avatar/" + MD5(email)
  ).property("email")

  firstName: Ember.computed(->
    fName = @get('name').split(' ')[0]
  ).property("name")

  lastName: Ember.computed(->
    lName = @get('name').split(' ')[1]
  ).property("name")

如何使用带有Jasmine的TDD / BDD进行测试?我想我应该测试逻辑:名字,姓氏和重力,但我怎样才能把它翻译成Jasmine?我最近读了很多关于测试的知识,但是你知道的理论与实践不同,我只是碰壁了。 :(

我应该模拟服务器获取JSON还是应该使用灯具?

1 个答案:

答案 0 :(得分:0)

我认为对单元测试模型,你根本不应该处理服务器(甚至模拟服务器) - 这取决于适配器。模型的单元测试将用于计算属性(在本例中为gravatar, firstname, lastname)和其他逻辑(生命周期回调,操作等)。您可以相当简单地测试它们 - 它们大多与服务器隔离。像这样:

describe "gravatar property", ->
  it "should append the md5 of the email to the gravatar path", ->
    user = Sks.User.createRecord name: "my name", email: "abc@def.com"
    expect(user.get('gravatar')).toBe "http://www.gravatar.com/avatar/#{MD5(user.get('email')}"

如果您正在使用Ember-Data的RESTAdapter,您可以假设它已经过充分测试(尽管您可能希望编写更高级别的集成测试,以显示您的模型已正确加载适配器数据)。如果您正在编写自己的适配器,则应该对其进行单独的单元测试。

要加载的应用程序的哪些部分

对于单元测试,您实际上只需要加载主命名空间(例如Sks = Ember.Application.create(...))和模型定义(例如Sks.User = DS.Model.extend(...))及其依赖项。在创建模型时,通过传入模拟/存根可以存储其他所有内容(请参阅:What is dependency injection?

我之前在测试环境中使用Ember的路由器自动加载时遇到了一些问题;你可能想要禁用路由器(虽然这只是一个问题,如果你为测试加载一切 - 我使用jasminerice所以所有的javascript资源都由Rails服务器编译,测试在浏览器中运行) - - 我认为在新的路由器中,您可以使用deferReadinesshttp://emberjs.com/api/classes/Ember.Application.html#method_deferReadiness。之前我正在设置autoinit: false