簡體   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