2015-12-06 15 views
14

Tôi đang làm việc trên ứng dụng Redux & cố gắng tạo gián điệp bằng cách sử dụng Jasmine trên hàm xuất mặc định ES6. Tôi đã thử một vài cách gián điệp khác nhau về chức năng, bao gồm sử dụng nhập khẩu ký tự đại diện để truy cập thuộc tính 'mặc định' của quá trình nhập, nhưng không có gì tôi đã thử đã làm việc cho đến nay. Dưới đây là một ví dụ, nơi tôi muốn thử nghiệm widgets.js và gián điệp về chức năng widget. Có cách nào để đạt được điều này mà không cần phải thay đổi cách im xuất khẩu chức năng từ widget.js?Làm cách nào để sử dụng Jasmine để theo dõi chức năng được nhập thông qua xuất ES6 mặc định?

widget.js

import { Map } from 'immutable'; 
import { CREATE_WIDGET } from 'actions'; 

const initialState = Map({ 
    id: undefined, 
    name: undefined 
}); 

export default function widget(state=initialState, action) { 
    switch (action.type) { 
    case CREATE_WIDGET: 
     return state.update((widget) => widget.merge(action.widget)); 

    default: 
     return state; 
    } 
} 

widgets.js

import { OrderedMap } from 'immutable'; 
import { CREATE_ROOM } from 'actions'; 
import widget from './widget'; 

const initialState = OrderedMap(); 

export default function widgets(state=initialState, action={}) { 
    switch (action.type) { 
    case CREATE_ROOM: 
     return state.set(action.widget.id, widget(undefined, action)); 

    default: 
     return state; 
    } 
} 
+0

Bạn có cách làm những gì bạn muốn làm với xuất khẩu được đặt tên không? Họ không phải là khác nhau thực sự. – Bergi

+0

Không, tôi không biết. Tôi đã nói về plugin này, tuy nhiên, tôi đã không thể làm cho nó chạy một cách chính xác và cảm thấy như tôi chỉ có thể phải xuất khẩu các chức năng như là một phương pháp trên một đối tượng. – evkline

Trả lời

19

Bạn nói rằng bạn đã cố gắng nhập khẩu các ký tự đại diện và gián điệp trên mặc định? Vấn đề với phương pháp đó là gì? Tôi vừa gặp phải vấn đề này và thực hiện việc này đã giải quyết vấn đề này cho tôi:

import * as widget from './widget'; 

describe('widget spec',() => { 
    beforeEach(() => { 
     spyOn(widget, 'default'); 
    }); 
}); 
+0

vấn đề với điều này là bạn loại bỏ khả năng có cây lắc xảy ra khi bạn xây dựng. Bạn muốn được tối ưu hóa như bạn có thể bằng cách chỉ cần nhập một phần bạn đang thực sự sử dụng. –

+0

nó không thực sự quan trọng bởi vì mã sản xuất không nên bao gồm các tệp thử nghiệm anyways –

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