2014-02-02 2 views
0

Я определяю следующий объект, который я намерен использовать для издевательства моделей Mongoose во время тестов Mocha. Я пишу это в CoffeeScript, поэтому у меня нет доступа к function ключевому слову:Невозможно определить объект с init и дочерними объектами

TodoError = (body) -> 
    @find = (query, callback) -> 
    callback 'error', false 
    @save = (query, callback) -> 
    callback 'error', false 
    @init = (body) -> {} 
    @init body 
    return @ 

Этот объект вызывался следующими способами:

TodoError.find {}, (error, todos) -> {} 

и

todo = new TodoError body 
todo.save (error, todo) -> {} 

Это приводит к следующей ошибке при попытке позвонить по телефону TodoError.find

TypeError: Object function (body) { 
    this.find = function(query, callback) { 
    return callback('error', false); 
    }; 
    this.save = function(query, callback) { 
    return callback('error', false); 
    }; 
    this.init = function(body) { 
    return {}; 
    }; 
    this.init(body); 
    return this; 
} has no method 'find' 

я первоначально имел это работает TodoError.find со следующим определением, однако я понял, что это не будет работать, когда я пришел к new TodoError части:

TodoError = 
    find : (query, callback) -> 
     callback 'error', false 
    save : (query, callback) -> 
     callback 'error', false 

ответ

0

ОК я совершенно забыл о prototype, а затем, наконец, нашли мой путь к CoffeeScript классов, с этим решением

class TodoError 
    # constructor doesn't need to do anything. 
    constructor: (body) -> 

    #static methods. 
    @find: (query, callback) -> 
    callback 'error', false 
    @findOne: (query, callback) -> 
    callback 'error', false 

    #instance methods. 
    save: (callback) -> 
    callback 'error', false 

Это компилирует:

TodoError = (function() { 
    function TodoError(body) {} 

    TodoError.find = function(query, callback) { 
    return callback('error', false); 
    }; 

    TodoError.findOne = function(query, callback) { 
    return callback('error', false); 
    }; 

    TodoError.prototype.save = function(callback) { 
    return callback('error', false); 
    }; 

    return TodoError; 

})(); 
Смежные вопросы