私の最初の ember.js アプリをテストしようとしています。ember アプリ キットを使用します。
qunit がセレクターでどのように機能するかに困惑しています (jquery セレクターが機能すると想定していましたが、ほとんどの場合、機能します...)。
私のハンドルバーには次のコードがあります:
{{#link-to 'locations.new' classNames='add-btn'}}
Add new location
{{/link-to}}
href
また、適切なリンクの存在をテストし、リンクをクリックして、クリック後に現在の URL とルートを確認するつもりです。
したがって、私のテストは次のとおりです。
// There is an element that links to locations/new
var link = find('a[href="#/locations/new"]');
ok(link, 'There is a link to add new location on the page');
click(link);
andThen(function() {
equal(currentRouteName(), 'locations.new', 'Clicked "add" button - now locations.new route is active');
equal(currentURL(), '/locations/new', 'Clicked "add" button - and current url is /locations/new');
});
注: EAK のこの PRのヘルパーを使用currentRouteName
していますが、意図したとおりに機能します。currentURL
私のテストは、click(link)
一部で失敗しError: Element [object Object] not found.
ます。
セレクターをクリックに直接渡そうとするとclick("a[href='#/locations/new']")
、エラーが発生しますElement a[href='#/locations/new'] not found.
。特殊文字 # をバックスラッシュまたは二重バックスラッシュでエスケープしようとしても、同じ結果になります。
当分の間、クラスごとに div を取得することで問題を軽減しました-次のように:
var link-by-class = find('.add-btn');
click(link-by-class);
andThen( as above )
そして、テストはパスします。
質問:
- href で見つかった同じ変数で "click()" を呼び出すことができないのはなぜですか?
- 実装に対して合理的に無関心でテストしていますか? (まあ、クラスごとに要素を見つけるという回避策は、その法案に適合しませんか?)
前もって感謝します!
アップデート
kingpin2kのコメントによると、選択したアサーション メソッドが間違っていたため、テストに合格していました。空の配列のok(foo, 'bar')
場合は合格します (結果がない場合に返されます)。Ember API ドキュメントでは、 findWithAssertを使用するように案内されましたが、などとリンクしております。foo
find
href
厄介なことに、 JS コンソールでjQuery ドキュメント[attribute='value']
ごとに jquery セレクターを使用すると機能します。そして、ember-testing でのfindとfindWithAssertの実装は、セレクターを jQuery に渡すだけのようです...
なぜ失敗するのですか?知らない。GLaDOSが説明したように、スピーディーなものが入り、スピーディーなものが出てくると考える人もいるでしょう-セレクターをjQueryに渡すだけで、jQueryが返すように返されますが、明らかにそうではありません.
その場合は、クラス セレクターの使用に固執しますが、それは実装に影響を与えます。