Also, dies war ein ziemlich interessantes Problem, dem ich begegnet bin.
Ich baue derzeit eine Backbone.js - Rails-App. Im Grunde baue ich dies nur zu Lernzwecken. Ich bemühe mich (wie jeder gute Rails-Entwickler) nach bestem Wissen und Gewissen um TDD/BDD und bin auf ein Problem mit Capybara gestoßen.
Ich habe eine Integrationsspezifikation, die lediglich den root_path testet (Backbone-History startet, anfängliche Informationen anzeigt, usw...).
require 'spec_helper'
describe "RentalProperties", js: true do
describe "GET /" do
it "sollte eine Liste der Eigenschaften zeigen" do
visit root_path
eventually{page.should have_content("Etwas")}
end
end
end
Ich führe Tests mit Jasmine, Sinon und Capybara/RSpec/Webkit durch. Ich folge locker sowohl dem Buch "Rspec on Rails" von thoughtbot (übrigens ein tolles Buch) als auch diesem Tutorial: http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html.
Als ich die obige Spezifikation ausführte, stieß ich auf diesen Fehler:
undefined|0|ReferenceError: Der Strict-Modus verbietet die implizite Erstellung der globalen Eigenschaft 'csrf_token'
Ich habe lange gebraucht, um dies zu lösen, weil es wirklich nichts zu diesem Fehler bei Google gibt.
Schließlich stieß ich auf die Verwendung von "use strict" in JS. Im Wesentlichen werden dadurch einige neue EMCA5-Skriptkonventionen verwendet. Es werden mehr Kodierfehler erkannt und verhindert, dass auf globale Variablen zugegriffen wird. Alles gute Dinge.
Also überprüfe ich, und in meiner sinon.js-Datei sehe ich:
"use strict";
auf Zeile 36 der Datei. Wie sich herausstellte, kommentierte ich diese Zeile aus und meine Tests funktionierten einwandfrei.
Hier ist meine Frage: Warum hat "use strict" csrf durcheinander gebracht? Ich gehe davon aus, dass dies etwas mit csrf_meta_tags in meinem Rails-Layout zu tun hat. Wenn möglich, würde ich gerne diese Zeile wieder in die Sinon-JS einfügen, da ich annehme, dass dies das "richtige" ist.
Hat jemand weitere Informationen dazu? Ich wäre im Voraus für alle Details dankbar!!