Also, das war ein ziemlich interessantes Problem, auf das ich gestoßen bin.undefined | 0 | ReferenceError: Der strikte Modus verbietet die implizite Erstellung der globalen Eigenschaft 'csrf_token'
Ich baue gerade eine backbone.js - Rails App. In der Regel nur für Lernzwecke zu bauen. Ich bin (wie jeder gute Rails-Entwickler) bei TDD/BDD mein Bestes geben und stieß auf ein Problem mit Capybara.
Ich habe eine Integrationsspezifikation, die nur root_path testet (Backbone-Verlauf startet, zeigt erste Informationen, etc ...).
require 'spec_helper'
describe "RentalProperties", js: true do
describe "GET /" do
it "should show a list of properties" do
visit root_path
eventually{page.should have_content("Something")}
end
end
end
Ich führe Tests mit Jasmin, Sinon und Capybara/rspec/webkit durch. Ich folge sowohl dem Buch "Rspec on Rails" von thoughtbot (ein tolles Buch übrigens) als auch diesem Tutorial: http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html.
Wenn die oben spec laufen, stieß ich auf diesen Fehler:
undefined|0|ReferenceError: Strict mode forbids implicit creation of global property 'csrf_token'
Ich habe eine lange Zeit, dieses heraus Sortierung, da Google-able für diesen Fehler wirklich nichts ist.
Schließlich stolperte ich über die Verwendung von "Use Strict-Modus" in JS. Im Wesentlichen wird dies einige neue EMCA5-Skriptkonventionen verwenden. Es fängt mehr Codierungs-Blooper ab und verhindert den Zugriff auf globale Variablen. Alle guten Dinge.
So prüfe ich, und in meiner sinon.js Datei, ich sehe:
"use strict";
auf der Leitung 36 der Datei. Und siehe da, ich sage die Zeile aus, und meine Tests funktionieren gut.
Hier ist meine Frage: Warum strikt csrf Unordnung verwendet? Ich nehme an, das hat etwas mit csrf_meta_tags in meinem Rails-Layout zu tun. Wenn möglich, möchte ich diese Zeile zurück in Sinon js setzen, da ich davon ausgehe, dass es das "Richtige zu tun" ist
Hat jemand mehr Informationen dazu? Ich freue mich über alle Details im Voraus!