2014-01-10 83 views
3

我有一個簡單route在我的應用程序是這樣的:測試行動ember.js與興農和konacha

Dash.PostsNewRoute = Em.Route.extend({ 
    model: function() { 
    return this.store.createRecord('post'); 
    }, 

    actions: { 
    saveForm: function() { 
     this.modelFor('postsNew').save(); 
    } 
    } 
}); 

這裏是我寫來測試saveForm,並確保它被稱爲測試:

... 
context('create new post', function() { 
    beforeEach(function() { 
    ... 
    }); 

    it('calls submit on route', function() { 
    var mock; 
    mock = sinon.mock(testHelper.lookup('route', 'posts.new')); 
    mock.expects('actions.saveForm').once(); 

    this.submitButton.click(); 

    mock.verify(); 
    mock.restore(); 
    }); 
}); 

但是,我得到一個錯誤,這個實現: Attempted to wrap undefined property actions.saveForm as function

如果我改變了路線,它的測試這樣的,它會工作:

// Moving the save out of action and call it 
Dash.PostsNewRoute = Em.Route.extend({ 
    model: function() { 
    this.store.createRecord('post'); 
    }, 

    save: function() { 
    this.modelFor('postsNew').save() 
    }, 

    actions: { 
    saveForm: function() { 
     this.save(); 
    } 
    } 
}); 

新的測試:

it('calls submit on route', function() { 
    var mock; 
    mock = sinon.mock(testHelper.lookup('route', 'posts.new')); 
    mock.expects('save').once(); 

    this.submitButton.click(); 

    mock.verify(); 
    mock.restore(); 
    }); 

這樣的測試將通過。是否可以直接測試actions.saveForm?是sinon的限制,阻止我訪問actions.saveForm?

回答

3

你可以嘲笑的行動哈希,並設置期望它像這樣:

mock = sinon.mock(testHelper.lookup('controller', 'posts_new')._actions); 
mock.expects('save').once(); 

this.submitButton.click(); 

mock.verify(); 
mock.restore(); 
+0

謝謝!我正在嘗試'.actions',似乎我必須檢查'._actions'。 – ArashM