0
最近ジャスミンを使い始めました。私は奇妙な状況に陥っています。別の関数呼び出しでDOM操作を行う関数をテストしています。ジャスミンは、elem.className
がコンストラクタではないと言ってエラーを投げています。ここに私のコードの構造は、次のとおりです。スタブジャスミンのDOM要素、angularjs
コントローラーコード:
function resetElem(elem) {
elem.classList.remove(/some string/);
}
function a() {
resetElem(document.getElementsByClassName('xx')[0])
}
ジャスミン:
var elem;
beforeEach(inject(function($rootScope, $controller, $q) {
deferred = $q.defer();
scope = $rootScope.$new();
mockHTMLElements();
createController($controller);
}));
function mockHTMLElements() {
/* //This was the other method that I tried.
jasmine.spyOn(document,
'getElementsByClassName').and.CallFake(function(name) {
var el;
if (!elems[name]) {
el = document.createElement('div');
el.className = name;
elems[name] = el;
}
return [elems[name]];
});
*/
elems['preview-promo'] = document.createElement('div');
elems['preview-promo'].className="preview-promo";
elems['create-promo'] = document.createElement('div');
elems['create-promo'].className="create-promo";
elem = {
classList : {
add : jasmine.createSpy('add'),
remove : jasmine.createSpy('remove'),
},
className : 'test'
};
}
it('tests the a function', function() {
// vm is ref of this of controller
vm.a(true);
...some other tests
});
コンソールが
TypeError: undefined is not an object (evaluating 'elem.classList')
この権利を作成する方法がわからない
を返します。
私はネットワークリクエストが行われたときに条件付きで 'progress'クラスを追加しています。私は指示を作ることができるかどうか分からない。ディレクティブのリンク関数を条件付きで呼び出す方法を教えてください。 –
あなたはしません。バインディングを使用すると、現在のスコープからCSSクラスを制御できます。 –
はそれを撃つでしょう。 –