这些是我测试的第一步,因此我不知道如何处理它。 在制作时我使用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还是应该使用灯具?
答案 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服务器编译,测试在浏览器中运行) - - 我认为在新的路由器中,您可以使用deferReadiness
:http://emberjs.com/api/classes/Ember.Application.html#method_deferReadiness。之前我正在设置autoinit: false
。