2012-06-26 13 views
11

Próbuję testować bezwzglę dnie moje modele widoku nokaut. Celowo unikam wszelkich konstrukcji ui w moim viewmodelu i zostawiam go na stronie html.Badanie bezwzglę dnego nokautu z mocha

Działa to doskonale w Jasmine ponieważ działa w przeglądarce, ale gdy przejść do mocha, ja skończyć z systemem głową naprzód do ostatniej linii na nokaut, która jest:

}) (okno, dokument, nawigator);

Szukałem w użyciu zombiejs który byłby miłą alternatywą, ale nie widzę dobrą historię o tym, jak z niego korzystać bez zmiany samego źródła nokaut.

Jakieś myśli o tym, jak się do tego podejść?

+0

Jakie cechy nokaut musisz w Państwa zdanie modeli?Jeśli jest to tylko obserwowalne, to wyśmiewaj je i ignoruj ​​resztę nokautu podczas testowania części VM. – Niko

+0

Problem polega na tym, że nawet przy wersji debugowania inicjowanie skryptów knockout.js (v2.1.0) powoduje błąd w wywołaniu navigator.userAgent. Dlatego nie mogę przejść do testowania modelu viewmodel i observerable/computed/pubsub. –

+0

Myślę, że zombie będzie najlepsze, ponieważ symuluje dom. Knockout został napisany jako segregator DOM-Model, a nie ogólny segregator modelu. Być może kręgosłup może być bardziej dostosowany do twojego stylu rozwoju. Glue.js to także fajny segregator zdarzeń. –

Odpowiedz

3

Temat ten jest obecnie również na moim radarem. Zrzucę tutaj moje odkrycia w nadziei, że mogą wskazać ci właściwy kierunek.

Najprawdopodobniej pierwszą próbą trasy będzie PhantomJS. To bezgłowy przeglądarka WebKit, więc powinna mieć doskonałe wsparcie dla selektorów DOM, JSON, HTML5 i CSS (na przykład works with jQuery and qUnit).

wybrałem ten, ponieważ jest on używany przez samą knockout.js, które odkryłem w repozytorium knockout.js, gdzie znajdował się .travis.yml plik i ten komentarz:

enter image description here

I nie ma żadnego dowodu, że to zadziała, ale zostało zachęcone przez jego użycie w rdzeniu knockout.js. Znalazłem także this runner script for knockout/phantom, który wygląda jak świetny punkt startowy.

Ja również znaleźć afewexamples użyciu mokka i PhantomJS poprzez node.js, w tym this lib extending grunt uruchomić mokka wewnątrz fantomu i this script showing how to run mocha inside PhantomJS. Ta część jest co najmniej pewna.

Innym rozwiązaniem noted in the knockoutjs archives, jest użycie knockout-node i JsDOM stworzyć realne dom, ale na pierwszy rzut oka wydawało się to zbyt mgliste i może doprowadzić do realizacji własnego środowiska testowego.

Istnieje plik zombie.js o rozmiarze slidedeck suggesting, który działałby z nokautem/węzłem/etc. Ale nie mogę znaleźć niczego oferującego twarde dowody, więc nie podobała mi się ta trasa.

+0

Zrobiłem to z PhantomJS i to działa dla mnie. YMMV. –

+1

@JohnRayner, czy mógłbyś opublikować opis swojego przepływu pracy? –

0

Może to dlatego, że zmieniono Knockout (ponieważ przyjęta odpowiedź jest stara), ale dzisiaj nie wierzę, że jest to konieczne (już). Możesz łatwo przetestować Knockout viewmodel. Wszystko, co potrzebne do zrobienia było ustawić zmienną globalną ko w moim teście:

global.ko = require('../../Website/Scripts/knockout-3.4.0.js'); 

Po tym, można uruchomić test jak zwykle: instancję Twojego ViewModel, wykonywać żadnych operacji na nim i dochodzić.

Pisałem a little more o tym, ale w istocie, to działa na mnie:

global.ko = require('../../Website/Scripts/knockout-3.4.0.js'); 

var MyViewModel = require('../../Website/Scripts/myViewModel.js').MyViewModel; 

describe('MyViewModel', function() { 
    var viewModel; 

    beforeEach(function(){ 
     viewModel = new MyViewModel(); 
    }); 

    describe('...', function() { 
     /* And so on */ 
    }); 
});