To był dość interesujący problem, na który natknąłem się.undefined | 0 | ReferenceError: Tryb ścisły zabrania niejawnego tworzenia właściwości globalnej "csrf_token"
Aktualnie buduję backbone.js - aplikację Rails. Generalnie po prostu buduję to dla celów edukacyjnych. Jestem (jak każdy dobry dev) grając najlepiej w TDD/BDD i wpadłem na problem z kapibarą.
Mam specyfikację integracji, które po prostu testuje root_path działa (rozpoczyna historię szkieletu, wyświetla informacje początkowe, itp ...).
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
Prowadzę testy z użyciem jaśminu, sinona i kapibara/rspec/webkit. Mam luźne śledzenie zarówno książki "Rspec on Rails" autorstwa thinkbota (niesamowita książka przy okazji), i tego samouczka: http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html.
Uruchamiając powyższą specyfikację, natknąłem się na ten błąd:
undefined|0|ReferenceError: Strict mode forbids implicit creation of global property 'csrf_token'
Wziąłem długi czas sortowania na to uwagę, ponieważ nie ma naprawdę nic google-stanie tego błędu.
W końcu natknąłem się na używanie "użyj trybu ścisłego" w JS. Zasadniczo użyje to nowych konwencji skryptowych EMCA5. Spowoduje to przechwycenie kolejnych przechwytujących kodowania i uniemożliwi dostęp do zmiennych globalnych. Wszystkie dobre rzeczy.
więc sprawdzić, aw moim sinon.js pliku, widzę:
"use strict";
na linii 36 pliku. Lo i oto komentuję linię, a moje testy działają dobrze.
Oto moje pytanie: Dlaczego użyłem ścisłego bałaganu csrf? Zakładam, że ma to coś wspólnego z csrf_meta_tags w moim układzie szyn. Jeśli to możliwe chciałbym umieścić tę linię z powrotem w sinon js jak zakładam jej na „słuszne”
Czy ktoś ma więcej informacji na ten temat? Doceniam wszelkie szczegóły z góry !!