2014-03-02 75 views
1
import Application from 'appkit/app'; 
import Router from 'appkit/router'; 

function startApp(attrs) { 
    var App; 

    var attributes = Ember.merge({ 
    // useful Test defaults 
    rootElement: '#ember-testing', 
    // LOG_ACTIVE_GENERATION:false, 
    // LOG_VIEW_LOOKUPS: false 
    LOG_ACTIVE_GENERATION: true, 
    LOG_MODULE_RESOLVER: true, 
    LOG_TRANSITIONS: true, 
    LOG_TRANSITIONS_INTERNAL: true, 
    LOG_VIEW_LOOKUPS: true 
    }, attrs); // but you can override; 



    Ember.run.join(function(){ 
    App = Application.create(attributes); 
    App.setupForTesting(); 
    App.injectTestHelpers(); 
    }); 

    Router.reopen({ 
    location: 'none' 
    }); 
    App.reset(); // this shouldn't be needed, i want to be able to "start an app at a specific URL" 

    return App; 
} 

export default startApp; 

//問:我想重寫默認的應用程序:適配器我試圖app.register其指向休息//適配器在我的實際應用與燈具適配器方法,但它不//工作任何指針。灰燼應用套件如何重寫應用適配器驗收測試

回答

1

我找到了解決方法 - 但是,我會在底部包含一個免責聲明。

爲了在應用程序已配置爲使用其他適配器時使用Fixture適配器,您需要重新定義應用程序適配器,以便它使用DS.FixtureAdapter類。

我看到您使用的是EAK,因此我已將此代碼包含在startApp函數中,位於創建應用程序的Ember.run函數之前。

define('myApp/adapters/application', ['exports'], function(exports) { 
    exports['default'] = DS.FixtureAdapter; 
}); 

現在您還需要爲您的應用程序所具有的每個模型定義燈具。您可能不想修改實際的源文件,因爲這些文件僅用於驗收測試,因此重新定義這些類也會有效。

我創造了另一個幫手叫setFixtures:

function setFixtures(modelName, fixtures) { 
    var model = require('myApp/models/' + modelName)['default']; 
    model.reopenClass({ 
    FIXTURES: fixtures 
    }); 
} 

export default setFixtures; 

加入這個作爲一個全球性的功能,並添加以下內容test-helper.js使jshint快樂後:

window.setFixtures  = require('myApp/tests/helpers/set-fixtures')['default']; 

我現在已經準備好了在我的每個模塊中使用它進行測試:

module('Acceptances - My fixtures', { 
    setup: function() { 
    setFixtures('my-model', [ 
     { id: 1, name: 'John Madden'  }, 
     { id: 2, name: 'AEIOUAEIOUAEIOU' } 
    ]); 
    App = startApp(); 
    } 
}); 
// your tests below 

免責聲明:我走過這條寂寞的道路,這是我所知道的唯一一條道路,但看起來DS.FixtureAdapter仍然存在一些問題(在寫作的那一刻),再加上它與DS.RESTAdapter有什麼不同(更多info here)。但是,大多數情況下,您可以通過調整測試中燈具的外觀來克服這些問題。

最大的問題是圍繞FixtureAdapter並且有許多關係,特別是那些是異步的關係。 There's a lot of information in the GitHub issues section of ember data,當然,他們會及時解決,但目前,這是相當片狀。

我確實達到了一個要點,我不得不修改源代碼,以便FixtureAdapter會很開心,或者爲測試重新定義所有的模型類 - 這在我看來很像重寫應用程序的一部分爲測試。這可以防止我測試很多可能是實際bug的問題(例如,忘記了異步關係?好吧,驗收測試不會警告你,因爲你重新定義了不需要它們的類。)

我現在正在學習朝着Ember-testing-httpRespond。但是,這是其他問題的材料。

+0

謝謝阿爾法。 – mz17

+0

@MayankGupta我知道很多時間已經過去了,但如果這個答案解決了你的問題,不要忘記將它標記爲已接受的答案。 =) – Alpha