2015-11-13 66 views
1

我正在嘗試編寫驗收測試,以查看模型中我訪問的路由的某個特性是否與我聲稱的一致。在驗收測試中訪問後獲取路由模型

我不會將信息輸出到此路線的頁面,而是使用一個燼插件將它的一部分保存到localstorage。所以通常我會意識到我可以使用find()在頁面上找到一個元素,並檢查它的內容以確定模型是否已解析,但這不適用於這種情況。

在驗收測試我有這樣的設置(使用幻影順便說一句)

test('Returns a user', function(assert) { 
    // Generate a user 
    var user = server.create('user',{first_name: 'Jordan'}); 
    // Visit the index page with the users short_url 
    visit('/' + user.short_url); 
    var route = this.application.__container__.lookup('route:index'); 

    // Assert that the model the user we created by checking the first name we passed in 
    assert.equal(route.model.first_name,'Jordan','Model returns user with first name Jordan'); 
}); 

但是,當運行測試它示出了結果爲undefined

UPDATE:

後試圖丹尼爾Kmak的答案我仍然無法讓它通過。這是路由代碼我與

import Ember from 'ember'; 
import LocalUser from 'bidr/models/user-local'; 

export default Ember.Route.extend({ 
    localUser: LocalUser.create(), 
    navigationService: Ember.inject.service('navigation'), 
    activate() { 
     this.get('navigationService').set('navigationMenuItems', []); 
    }, 
    beforeModel() { 
     this.localUser.clear(); 
    }, 
    model(params) { 
     var self = this; 
     return this.store.queryRecord('user',{short_url: params.short_url}).then(function(result){ 
      if(result){ 
      self.set('localUser.user', { 
       "id": result.get('id'), 
       "first_name": result.get('first_name'), 
       "active_auction": result.get('active_auction'), 
       "phone": result.get('phone') 
      }); 
      // transition to event page 
      self.transitionTo('items'); 
      } else { 
       self.transitionTo('home'); 
      } 
     }); 
    } 
}); 

的工作和測試看起來像這樣

import Ember from 'ember'; 
import { module, test } from 'qunit'; 
import startApp from 'bidr/tests/helpers/start-app'; 


module('Acceptance | index route', { 
    beforeEach: function() { 
    this.application = startApp(); 
    }, 

    afterEach: function() { 
    Ember.run(this.application, 'destroy'); 
    } 
}); 

test('Returns a user', function(assert) { 
    var user = server.create('user',{first_name: 'Jordan'}); 

    visit('/' + user.short_url); 

    var route = this.application.__container__.lookup('route:index'); 

    andThen(function() { 
    assert.equal(route.get('currentModel.first_name'),'Jordan','Model returns user with first name Jordan'); 
    }); 
}); 

所有代碼的工作,因爲它應該在開發中。

+0

我想嘗試使用'controller.model'而不是'route.model'以避免異步行爲 – artych

+0

那麼如何讓控制器在測試中可訪問?我嘗試將查找更改爲'controller:index',但我仍然無法訪問它 – Jordan

+0

您可以分享您訪問的路由的路由器代碼和user.short_url的示例值,以及該路由的模型函數嗎? –

回答

0

好了,我已經嘗試過的灰燼測試,看來你要善於與得到模型andThen鉤:

test('returns a user', function(assert) { 
    visit('/'); // visit your route 

    var route = this.application.__container__.lookup('route:index'); // find your route where you have model function defined 

    andThen(function() { 
    console.log(route.get('currentModel')); // your model value is correct here 
    assert.equal(currentURL(), '/'); // make sure you've transitioned to correct route 
    }); 
}); 

以你的代碼應該運行得很好:

test('Returns a user', function(assert) { 
    var user = server.create('user',{first_name: 'Jordan'}); 

    visit('/' + user.short_url); 

    var route = this.application.__container__.lookup('route:index'); 

    andThen(function() { 
    assert.equal(route.get('currentModel.first_name'),'Jordan','Model returns user with first name Jordan'); 
    }); 
}); 

另外需要注意的是,您可以通過route.currentModel屬性訪問模型。

對於我的模型:

export default Ember.Route.extend({ 
    model() { 
    return Ember.RSVP.hash({ 
     simple: 'simpleValue', 
     promise: Ember.RSVP.resolve(5) 
    }); 
    } 
}); 

andThenconsole.log(route.get('currentModel'));我:

Object {simple: "simpleValue", promise: 5} 

記錄。

+0

當我改變,我得到一個'TypeError:不能讀取未定義的屬性'模型',並記錄路由變量到控制檯返回未定義。但是,通過'route:index'記錄到控制檯的路由將返回路由類。 – Jordan

+0

我的答案已更新。現在檢查。 –

+0

仍未通過,我將在問題中添加我的路線代碼和當前測試 – Jordan