5

jQuery

$(".theme-picker").click(function () {
      $('head').append('<link rel="stylesheet" href="" type="text/css" media="screen" id="theme_switcher"/>');
});

ジャスミン

describe("style.switcher", function() {

beforeEach( function() {
    jasmine.getFixtures().set(
        '<head></head>' +
        '<div class="switcher">' +
          '<a class="theme-picker" title="theme-picker"></a>' +
          '<a class="folder-picker" title="folder-picker"></a>' +
          '<a class="font-picker" title="font-picker"></a>' +
          '<a class="color-picker" title="color-picker"></a>' +
        '</div>' );
  });

it("loads themes switcher link in head", function() {
  $('.theme-picker').trigger('click');
  expect( $('head') ).toContain("theme_switcher");
});
});

私はジャスミンに不慣れで、テストは現在失敗しています。それがフィクスチャなのか、トリガーイベントなのか、それともまったく別のものなのかはわかりません。

4

3 に答える 3

7

選択した答えは(OPによるものですが!)誤解を招き、正しくないと思います。JavaScriptの一部がターゲットHTMLに与える影響をテストすることが、なぜ「貧弱な形式」になるのかわかりません。多くの場合、メソッドが機能するかどうかを確認するために使用できる出力はこれだけです。

例として使用されているテストは、実際には何も証明していません。もちろん、クリックがトリガーされただけです。あなたがしたいのは、そのクリックから続く何かを証明することです。たとえば、元の(IMOが正しい)本能であったDOMまたは他のデータ構造の変更です。

必要なのは、非同期テストを使用してDOMの変更を待ってからあきらめることです。これは、RubyライブラリのCapybaraが機能するのと同じ方法です。

it('loads themes switcher link in head', function() {
  $('.theme-picker').trigger('click');

  waitsFor(function() {
    return $('head').contains('theme_switcher');
  }, 'theme switcher never loaded', 10000);
});
于 2012-07-25T05:31:51.803 に答える
1

調査によると、ページ固有の要素をテストするのは不十分な形です。

私の現在のテスト(合格)は次のとおりです。

describe("zen switcher", function() {

beforeEach( function() {
  loadFixtures('zen_switcher.html');
  spyOnEvent($('.theme-picker'), 'click');
});

it("clicks the .theme-picker", function() {
  $('.theme-picker').click();
  expect('click').toHaveBeenTriggeredOn($('.theme-picker'));
});
});
于 2012-06-01T21:24:08.613 に答える
0

theme_switcherリンクのIDです。toContainセレクターを取ります。つまり、を書く必要がありますtoContain('#theme_switcher')

また、サンドボックスに追加していることと、ドキュメントではなくサンドボックスのヘッドをチェックしていることを確認してください。

編集:

jasmine-jqueryを使用していると思います

于 2012-06-01T19:00:43.010 に答える