$(document).readyで実行するように設定されたjqueryバインディングが、使用可能なフィクスチャhtmlを持っていないということはかなり確信しています。したがって、jquery関数を介してDOMに変更を加えるためのイベントが発生した場合、何も起こらず、テストが失敗します。私はこの問題の "解決策"を見たhereしかし、私のために働いた解決策は、.clickメソッドの代わりに.liveメソッドでバインドするために私の作業jquery関数を変更する必要がありました。私はこれに2つの問題があります。まず、テストが適切に行われるように作業コードを変更する必要はありません。テストフレームワークは、DOMロードとjavascriptバインディングが正しい順序で行われるアプリでコードが動作するかどうかをテストする必要があります。私が解決策に持っている2番目の問題は、.onと.delegateが両方とも何らかの理由で動作しなかったことです。動作しなくなったのは、現在廃止されつつある.liveメソッドを使用することだけでした。結論として、私は、フィクスチャが$(document).readyで動作する関数の前にロードされるように、テストまたはテストフレームワーク自体を変更する方法を理解したいと思います。ジャスミンテストのフィクスチャをロードするにはどうすればよいですか?
私はレール3.2.8で作業しています。ジャスミンテストを試すために2つの異なるブランチを設定しました。支店の1つはジャスミンネリセの宝石を使い、もう1つはジャスミンレールの宝石を使います。 JavascriptとjQuery(.liveメソッドを使用している場合)のテストは、これらの設定の両方で正しくパスします。ここで
はjasminericeを使用して、分岐の説明である:ここで
はジャスミンを記述する私のGemfile.lockファイルからの行があるとjQueryはセットアップ:
jasminerice (0.0.9)
coffee-rails
haml
jquery-rails (2.1.3)
railties (>= 3.1.0, < 5.0)
thor (~> 0.14)
Jasminericeはによってjasmine-jquery拡張子を含みますデフォルト。 jasmine-jQuery拡張機能は、テストで使用しているtoHaveTextメソッドを提供します。
直接指定/ JavaScriptのディレクトリ内にあるテストファイルjasmine_jquery_test.jsは、このコンテンツを含んでいます
#= require application
describe ("my basic jasmine jquery test", function(){
beforeEach(function(){
$('<a id="test_link" href="somewhere.html">My test link</a>').appendTo('body');
});
afterEach(function(){
$('a#test_link').remove();
});
it ("does some basic jQuery thing", function() {
$('a#test_link').click();
expect($("a#test_link")).toHaveText('My test link is now longer');
});
it ("does some the same basic jQuery thing with a different trigger type", function() {
$('a#test_link').trigger('click');
expect($("a#test_link")).toHaveText('My test link is now longer');
});
});
describe ('subtraction', function(){
var a = 1;
var b = 2;
it("returns the correct answer", function(){
expect(subtraction(a,b)).toBe(-1);
});
});
dirがこれを持っているアプリ/資産/ JavaScriptの中に位置しています私のjavascriptのファイルtests.js内容:
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require vendor
//= require_tree .
:同じアプリ/資産/ JavaScriptのdirをに位置
function subtraction(a,b){
return a - b;
}
jQuery (function($) {
/*
The function I would rather use -
$("a#test_link").click(changeTheTextOfTheLink)
function changeTheTextOfTheLink(e) {
e.preventDefault()
$("a#test_link").append(' is now longer');
}
*/
$("a#test_link").live('click', function(e) {
e.preventDefault();
$("a#test_link").append(' is now longer');
});
});
私application.jsファイルには、このコンテンツを持っています
ジャスミンレールの説明は、first jasmine test related stackoverflow questionの内容に記載されています。
したがって、フィクスチャがロードされた後に$(document).ready関数が実行されるようにテストを操作する方法があれば、私はあなたの考えを聞きたいと思いますか?
ドキュメンテーションの[jasmine-jquery](https://github.com/velesin/jasmine-jquery)に記載されているとおり、デフォルトでは、フィクスチャはspec/javascripts/fixturesから読み込まれます。このパスを設定することができます:jasmine.getFixtures()。fixturesPath = 'my/new/path'; ' – RamRovi
これはまだ最高の解決策ですか?現時点では、プロダクションコードを変更するたびにフィクスチャにコピーする必要があるため、これは面倒です! – james