2014-12-08 36 views
0

我對使用TWO模型的路線進行qunit測試,並使用Ember.RSVP.hash來完成此操作。事情按預期工作,但只要我將filter添加到Ember.RSVP.hash就會停止以qunit方式檢索數據。在qunit之外,它仍然有效,所以我認爲這是filterEmber.RSVP.hashqunit的問題。在Ember.RSVP.hash中使用過濾器無法在qunit測試中檢索數據

這裏是我的測試:

module('Ember.js Library', { 
    setup: function() { 
    Ember.run(App, App.advanceReadiness); 
    }, 
    teardown: function() { 
    App.reset(); 
    } 
}); 

test('foo', function() { 
    visit('/books'); 
    andThen(function() { 
    equal(currentRouteName(), 'books.index'); 
    }); 
}); 

下面是不使用filter工作路線:

App.BooksRoute = Ember.Route.extend({ 
    model: function() { 
    var id = 1; 

    // note this does not filter "books" properly 
    return Ember.RSVP.hash({ 
     books: this.store.find('books'), 
     library: this.store.find('library', id) 
    }); 
    } 
}); 

下面是一個使用filter和不工作的版本:

App.BooksRoute = Ember.Route.extend({ 
    model: function() { 
    var id = 1; 

    // note: filters "books" properly but doesn't work in qunit 
    return Ember.RSVP.hash({ 
     books: this.store.filter('books', function(record) { 
     return record.get('libraryId') === id; 
     }), 
     library: this.store.find('library', id) 
    }); 
    } 
}); 

最終的結果是在工作版本中,books如預期那樣存在。在第二個版本中,books最終爲空。在這兩個版本中library總是存在,所以我認爲filter是問題所在。如何使用filter並使用qunit工作?

回答

1

store.filter實際上並沒有加載記錄,它只會返回已經在商店中的記錄。你可能想要做的是一樣的東西......

App.BooksRoute = Ember.Route.extend({ 
    model: function() { 
    var id = 1; 

    // note: filters "books" properly but doesn't work in qunit 
    return Ember.RSVP.hash({ 
     books: this.store.find('books').then(function(books){ 
     return books.filterBy('libraryId', id) 
     }), 
     library: this.store.find('library', id) 
    }); 
    } 
}); 

(免責聲明:以上代碼是未經測試,但多數民衆贊成的想法)

+0

我要去嘗試了這一點。但是當我在本地運行代碼時,我的代碼可以正常工作,而不是在qunit中。 – Dty 2014-12-08 03:27:11

+0

本地商店是否可能通過對'this.store.find('books')'的不同調用來預加載? – tikotzky 2014-12-08 03:28:32

+0

你說得對,它已經在應用程序路線中預裝了。不知道爲什麼這不起作用...猜是時候換另一個SO問題了。 – Dty 2014-12-08 03:53:02

相關問題