@GeraldIstar
Frontend

Как подменить переменную в Javascript?

Пытаюсь наладить unit-тестирование. Имеется некоторый код:
var Common = module.exports = {
  unit: {
    somejQueryFn: function() { $('.selector') /* работаем с jQuery */ }
  }
}

Пытаюсь написать юнит-тест:
describe('Test jQuery spec', function(){
  var Common = require('common');
  it('not working :( ', function(){
     //Работает. Я использую jsdom, и для тестов создается DOM c jQuery, он работает.
    expect( typeof $ ).toBe('function');

    //А вот тут валится, говорит $ не определен, валиться именно в common, по стеку видно.
    expect( Common.unit.somejQueryFn() ).toBe( result );
  })
})

Собственно вопрос - каким можно сделать так, что бы $ внутри Common, указывала $ который я создал в юнит тесте? Пробовал через .call(), но естественно не сработало. Была идея сделать костыль типа new Function( fn.toString() ), но это нужно отрезать function(){}, что не радует
  • Вопрос задан
  • 2295 просмотров
Решения вопроса 1
@GeraldIstar Автор вопроса
Frontend
В общем решение было гораздо проще - `global.$ = jQuery`. Вот так-то(
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
k12th
@k12th
console.log(`You're pulling my leg, right?`);
var Common = module.exports = function ($) {
    return {
        unit: {
            somejQueryFn: function () {
                $('.selector') /* работаем с jQuery */
            }
        }
    }
};

describe('Test jQuery spec', function () {
    var Common = require('common')($);
    it('not working :( ', function () {
        //Работает. Я использую jsdom, и для тестов создается DOM c jQuery, он работает.
        expect(typeof $).toBe('function');

        //А вот тут валится, говорит $ не определен, валиться именно в common, по стеку видно.
        expect(Common.unit.somejQueryFn()).toBe(result);
    })
});


Глобальные переменные a.k.a неявные зависимости sucks, dependency injection rulezzz! Синглтоны в ту же топку.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы