2013-04-03 31 views
5

Tôi có một dự án Marionette, tương tự như thiết lập được mô tả trong http://www.backbonerails.com/ Tôi đang sử dụng Rails, Coffeescript và Jasmine/Sinon cho thông số kỹ thuật.Thử nghiệm Mô-đun rối trong cô lập với Jasmine

Tôi đang gặp sự cố khi kiểm tra mô-đun. Một ví dụ là bộ định tuyến:

@MyApp.module "DashboardApp", (DashboardApp, App, Backbone, Marionette, $, _) -> 

    class DashboardApp.Router extends Marionette.AppRouter 
    appRoutes: 
     "dashboard" : "showDashboard" 

    API = 
    showDashboard: -> 
     DashboardApp.Show.Controller.showDashboard() 

    App.addInitializer -> 
    new DashboardApp.Router 
     controller: API 

Tôi không chắc chắn làm thế nào để kiểm tra điều này tách biệt với Ứng dụng (window.MyApp). Tôi muốn cơ bản kích hoạt "#dashboard" route và khẳng định rằng showDashboard được gọi, mà không cần phải để cho toàn bộ ứng dụng tham gia vào việc này. Chúng tôi đang sử dụng đường dẫn tài sản Rails (vì vậy không có RequireJS), vì vậy tất cả các tệp JS được tải khi bắt đầu. Những gì tôi nghĩ rằng sẽ làm việc tốt là bằng cách nào đó giả sử các đối tượng ứng dụng được sử dụng trong mô-đun này, nhưng tôi mở cửa cho bất kỳ giải pháp.

Vấn đề khác mà tôi đã tương tự đang thử nghiệm rối lệnh và reqres, ví dụ như trong một cái nhìn Tôi có

App.execute("navigate:root") 

Một lần nữa vấn đề là tôi không muốn có những ứng dụng thực tế tham gia spec, tôi muốn ví dụ làm cho một Marionette.Application mới chỉ cho spec. Khung nhìn nằm trong một mô-đun được định nghĩa giống như tôi đã chỉ ra trong ví dụ mã đầu tiên.

Về cơ bản tôi muốn tránh sử dụng ứng dụng thực trong thông số kỹ thuật và sử dụng mô hình hoặc (có lẽ tốt hơn/dễ dàng hơn) chỉ là một Marionette.Application mới. Vì vậy, điều này sẽ hữu ích cho tôi trong mọi trường hợp mọi thứ đi qua đối tượng ứng dụng, ví dụ như công cụ Wreqr, công cụ khởi tạo cho bộ định tuyến, v.v.

Trả lời

4

Bạn nên khai thác với sinonJs.

Thử nghiệm đầu tiên sẽ khởi tạo Bộ định tuyến và sau đó chọn phương thức showDashboard của Bộ điều khiển.

@router = new App.DashboardApp.Router 
@showDashboardStub = sinon.stub @router.controller, 'showDashboard' 
@router.navigate "dashboard", {trigger: true} 

và thử nghiệm mà nó được gọi là

expect(@showDashboardStub).toHaveBeenCalled() 

Các thử nghiệm thứ hai phụ thuộc nếu bạn muốn kiểm tra lệnh được gọi để thực hiện hoặc lệnh được xử lý. Trường hợp đầu tiên bạn khởi tạo trình thực thi và khai báo App.execute, trường hợp thứ hai bạn khởi tạo lớp xử lý lệnh và gọi App.execute.

Các vấn đề liên quan