2014-03-24 3 views
0

У меня есть класс, который я определил в JavaScript, как это:функция экспорта/класс от модуля Node.js

var CoolClass = function() { 
    this.prop1 = 'cool'; 
    this.prop2 = 'neato'; 
} 

CoolClass.prototype.doCoolThings = function(arg1, arg2) { 
    console.log(arg1 + ' is pretty ' + this.prop1; 
} 

modules.export = CoolClass; 

Мне нужно, чтобы иметь возможность экспортировать это, чтобы я мог проверить его в Mocha с использованием требуют. Но я бы также хотел, чтобы этот класс был создан в браузере.

На данный момент я могу загрузить это в браузер, создать экземпляр, и это хорошо. (Очевидно, я получаю сообщение об ошибке в консоли о не понимая ключевое слово «экспорт» или «модуль»)

Как правило экспортировать несколько одиночных функций с помощью

exports.someFunction = function(args){}; 

Но теперь, когда я хочу просто экспортировать, что один функции, ни один из методов, которые я добавил через цепочку прототипов, не определен.

Я пробовал module.exports, но это тоже не похоже на трюк. Мой Mocha спецификации требует файл так:

var expect = require('chai').expect; 
var coolClass = require('../cool-class.js'); 
var myCoolClass; 

beforeEach(function() { 
    myCoolClass = new coolClass();// looks like here is where the issue is 
}); 

describe('CoolClass', function() { 
    // if I instantiate the class here, it works. 
    // the methods that were added to CoolClass are all undefined 

}); 

Похоже, мой beforeEach в мокко, где он получает споткнулся. Я могу создать экземпляр класса в реальной спецификации, и он работает отлично.

+1

Не могли бы вы попытаться ответить ниже? Я думаю, вам нужно указать, что beforeEach в родительском описать. Подробности моего ответа. – aiapatag

ответ

1

На mochajs вам нужно поставить beforeEach внутри родителя describe, и у вас есть конкретные сценарии для детей describe s. Иначе дела, сделанные в beforeEach, не распознаются вашим describe. Ваш myCoolClass просто рассматривается как глобальная переменная, и ничего не было создано на самом деле, поэтому функции прототипа не определены.

Так что-то вроде (извините, я просто на мобильный телефон):

var MyCoolClass = require('mycoolclass.js'); 
describe('MyModule', function() { 
    var myCoolClass; 

    beforeEach(function() { 
    myCoolClass = new MyCoolClass(); 
    }); 

    describe('My Scenario 1', function() { 
    myCoolClass.doSomethingCool('This'); //or do an assert 
    }); 
}); 

Вы можете посмотреть на его documentation для получения более подробной информации.

+0

Полный flub с моей стороны. Спасибо, что указали мне в правильном направлении! –

+0

Я говорил слишком рано. Передняя квартира не работает независимо от того, где я ее положил. Но, честно говоря, вопрос выходит за рамки первоначального вопроса. Я немного погуляю, и если я не смогу это исправить, я отправлю совершенно другой вопрос. –

+0

Хм, это странно. Конечно, меня тоже интересует, с какими проблемами вы столкнулись. – aiapatag

Смежные вопросы