繁体   English   中英

使用Jasmine和DS.FixtureAdapter测试Ember-data

[英]Testing Ember-data w/Jasmine and DS.FixtureAdapter

我正在尝试使用DS.FixtureAdapter对ember-data进行Jasmine测试(使用当前的master)。 我已经尝试了以下代码的几十种变体(有和没有尝试创建一个Application命名空间)。 我也进入了ember-data源,试着看看发生了什么,并以ember-data本身的测试为例。

我也尝试过使用Ember.run块和Jasmine wait()的变体Person.find(1)。

无论我尝试什么, store.find(Person, 'test')返回一个结果,但是尝试获取其中一个属性会导致null(测试断言失败)。 我没看到什么? 谢谢你的帮助!

describe "a test", ->
  store = null
  Person = null

  beforeEach ->

    store = DS.Store.create
      revision: 11
      adapter: 'DS.FixtureAdapter'

    Person = DS.Model.extend
      firstName: DS.attr('string')
      lastName: DS.attr('string')
      age: DS.attr('number')

  it "works or does it", ->
    Person.FIXTURES = [{
      id: 'test'
      firstName: 'Kyle'
      lastName: 'Stevens'
      age: 30
      }]

    kyle = store.find(Person, 'test')
    expect(Em.get(kyle, 'firstName')).toEqual('Kyle')

无论我尝试什么,store.find(Person,'test')都会返回一个结果,但是尝试获取其中一个属性会导致null(测试断言失败)。 我没看到什么? 谢谢你的帮助!

这是一个时间问题。 当您调用store.find()它会异步运行查询并返回模型承诺。 这意味着当控制返回到测试时,查询仍在运行(或计划运行),从而导致预期失败。

这就是我们对ember的喜爱,这意味着你的应用程序可以将kyle视为数据存在,并相信当数据可用时,值将通过绑定自动更新。

当然,当它阻止你的测试通过时,所有这些魔法并不是那么好。 以下是一些替代方法:

1)注册didLoad回调

kyle = store.find(Person, 'test');
kyle.on('didLoad', function() {
  console.log('should = kyle: ', Em.get(kyle, 'firstName'));
});

2)而不是didLoad可以使用更多的黑盒测试方法,只需验证名称是否在调用find的100毫秒内设置属性 - 当然这可能会导致脆弱的测试Ember.run.later(this,function(){console。 log('should = kyle:',Em.get(kyle,'firstName')); console.log('should = kim:',Em.get(App.kim,'firstName'));},100) ;

我相信在jasmine测试中,您可以将您的设置代码包装在runs()方法中,并使用waitsFor来验证该值是否已按预期设置:

  waitsFor(function() {
    return Em.get(kyle, 'firstName') == 'Kyle';
  }, "x to be set to 5", 100);

有关工作(非茉莉花)示例,请参阅此JSBIN: http ://jsbin.com/apurac/4/edit

有关使用jasmine进行异步测试的提示,请参阅此文章: http//blog.caplin.com/2012/01/17/testing-asynchronous-javascript-with-jasmine/

此外,请确保为所有测试设置Ember.testing = true 有关详细信息,请参阅此SO帖子: 是否建议为单元测试设置Ember.testing = true?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM