Wpis z mikrobloga

Drodzy #angular #webdev mircy.
Ja to go trochę nie ogarniam (a miał być taki prosty ...). Pomóżcie proszę zanim się zamęczę na śmierć.

mam przykładowy moduł:

var Videos = angular.module('App.videos', ['ngRoute']);

Videos.controller('videosCtrl',
['$scope', '$rootScope', 'config', '$resource', 'log', function($scope, $rootScope, config, $resource, log) {

log.info('działaj dzifffko');
$scope.htmlReady();
}]
);

Jak widać wymaga dwóch customowych serwisów. Działa w każdym razie.
Teraz chcę napisać testy no i ... mam takie coś mniej więcej:

describe('Videos', function() {

var $ctl, $scope, config, $resource, log;

beforeEach(module('App.videos'));

beforeEach(inject(function(_$controller_){
$ctl = _$controller_;
}));

describe('Check controller', function() {
it('propably should exist ... ', function() {
var ctl = $ctl('videosCtrl', {$scope: $scope, config: config, $resource: $resource, log: log});
config = config;
log = log;
expect(ctl).toBeDefined();
});
});
});

I karma ciągle krzyczy, że nie może przeczytać "info" z undefined. Jak wywalę console loga, to na configu się wywala.
Generalnie nie krzyczy o brak zależności przy odpalaniu testu (już nie krzyczy ;) ), ale te zależności zwyczajnie nie są odpalane.

Ogólnie wszystko działa ... tylko nie test :P

Pomocy :)
  • 12
@npsr: No ale panie szanowny, ustawiasz log: log a więc nadajesz mu wartość która jest undefined (bo nie przypisujesz nigdzie nic do zmiennej log), jak ma to działać? :P Wstrzyknij sobie log, np. w taki sposób:

beforeEach(inject(function(_$controller_, _log_){
$ctl = _$controller_;
log = _log_;
}));
I będzie działać. Angular nie podstawi ci magicznie wartości pod te zmienne, bo jak? Reszta analogicznie.

Angular prosty

Nie wierz w te brednie, Angular
@Marmite:

Nie wierz w te brednie, Angular ma zajebiście wysoki próg wejścia.

Zauważyłem :/

Error: [$injector:modulerr] Failed to instantiate module log due to:
Error: [ng:areq] Argument 'fn' is not a function, got string
@Marmite: w skrócie:

angular.module('App').factory('log', ['config', function(config){

var fire = config.env !== 'prod' ? true : false;

return {
msg : function(str, stl) {if(fire) console.log (str, stl || '')}
}
}]);
@npsr: Hm, albo to wygląda w porządku, albo jestem ślepy. Ale gapię się na to od 5 minut i błędu nie widzę. A nie mam teraz komputora, żeby odpalić i sprawdzić czy to wina samego tego kodu, czy raczej innych czynników (np. niedołączony plik .js, literówka, cokolwiek)
@Marmite: > Nie wierz w te brednie, Angular ma zajebiście wysoki próg wejścia.

a coś łatwiejszego od angulara się znajdzie? xD tzn. żeby połączyć z django rest?. zacząłem się uczyć django rest aby połączyć z angularem od frontu, ale nie wiem czy nie ocipieje prędzej xD
Bo działać to wszystko działa. Tylko nie testy :)

dużo rzeczy może go wygenerować


@Marmite: ale cholera w kilkulinijkowym kodzie? :P echhh mam kolejny powód, żeby nie lubić angulara :)
@npsr: A, to w testach tylko... No to tym bardziej nie wiem, jedyne co mi przychodzi do głowy to niezałączenie wszystkich potrzebnych plików.

echhh mam kolejny powód, żeby nie lubić angulara :)

Niejasne komunikaty błędów (a raczej: niejasne co należy zrobić, żeby zaczęło działać) to jest baaaaardzo #!$%@? strona tego frameworka. Ile ja już się w swoim życiu naszukałem przyczyn tego typu błędów, to nie zliczę.
@Marmite: właśnie nie pamiętam, kiedy ostatnio mi się coś tak ciężko debugowało. A
plik dołączony musi być, bo znajduje się w równoległym katalogu a biorę wszystkie jsy z nadrzędnego, więc jakby miało go nie być, to testu też by nie było :)