私はRails3.2.8をjasmine-railsgemで実行しています。ジャスミンのセットアップを説明する私のGemfileの行は次のとおりです。
jasmine (1.2.1)
jasmine-core (>= 1.2.0)
rack (~> 1.0)
rspec (>= 1.3.1)
selenium-webdriver (>= 0.1.3)
jasmine-core (1.2.0)
jasmine-headless-webkit (0.8.4)
coffee-script
jasmine-core (~> 1.1)
multi_json
rainbow
sprockets (~> 2)
jasmine-rails (0.1.0)
jasmine
jasmine-headless-webkit
rails (>= 3.1.0)
また、jasmine-jquery拡張機能を使用しています。この一連の関数は、テストで使用しているtoHaveTextメソッドを提供します。jasmine-jquery拡張ファイルをspec/javascripts/helpersディレクトリに保存しました。
spec / javascriptsディレクトリ内に直接あるUserInvitationsSpec.jsというテストファイルには、次のコンテンツが含まれています。
describe ("my basic jasmine jquery test", function(){
beforeEach(function(){
$('body').append('<a id="test_link" href="somewhere.html">My test link</a>');
});
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);
});
});
ご覧のとおり、jQuery以外のテストが期待どおりに機能していることを示すために、基本的なjavascriptテストを含めました。
app / Assets / javascriptsディレクトリにある私のjavascriptファイルcore.jsには、次の内容が含まれています。
function subtraction(a,b){
return a - b;
}
jQuery (function($) {
$("a#test_link").click(changeTheTextOfTheLink)
function changeTheTextOfTheLink(e) {
e.preventDefault()
$("a#test_link").append(' is now longer');
}
});
そして、ターミナルから「bundle exec jasmine-headless-webkit」を実行すると、次のように出力されます。
FF.
FAIL: 3 tests, 2 failures, 0.013 secs.
my basic jasmine jquery test does some basic jQuery thing. (/Users/rebekah/OPSWAT/opswat_cwm/spec/javascripts/UserInvitationsSpec.js:11)
Expected '<a id="test_link" href="somewhere.html">My test link</a>' to have text 'My test link is now longer'. (line ~13)
expect($("a#test_link")).toHaveText('My test link is now longer');
my basic jasmine jquery test does some the same basic jQuery thing with a different trigger type. (/Users/rebekah/OPSWAT/opswat_cwm/spec/javascripts/UserInvitationsSpec.js:16)
Expected '<a id="test_link" href="somewhere.html">My test link</a>' to have text 'My test link is now longer'. (line ~18)
expect($("a#test_link")).toHaveText('My test link is now longer');
同じapp/Assets / javascriptsディレクトリにある私のapplication.jsファイルには、次の内容が含まれています。
//= require jquery
//= require jquery_ujs
//= require bootstrap
//= require vendor
//= require_tree .
そして、spec / javascripts/supportディレクトリにある私のjasmine.ymlファイルには次の内容が含まれています。
src_files:
- "application.{js,coffee}"
stylesheets:
helpers:
- "helpers/**/*.{js,coffee}"
spec_files:
- "**/*[Ss]pec.{js,coffee}"
src_dir: "app/assets/javascripts"
spec_dir: spec/javascripts
asset_paths:
- "vendor/assets/javascripts"
アプリで正しく機能するjQuery関数がテスト環境で実行されない理由はありますか?
本当にありがとう!
-レベカ