undefined | 0 | ReferenceError: Tryb ścisły zabrania niejawnego tworzenia globalnej właściwości „csrf_token”
To był dość interesujący problem, na który wpadłem.
Obecnie buduję aplikację backbone.js - Rails. Generalnie po prostu buduję to dla celów edukacyjnych. Jestem (jak każdy dobry dev rails) robiący co w mojej mocy w TDD / BDD i wpadłem na problem z kapibarą.
Mam specyfikację integracji, która jedynie testuje pracę root_path (historia Backbone uruchamia się, wyświetla początkowe informacje 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
Używam testów z jaśminem, sinon i capybara / rspec / webkit. Luźno śledzę zarówno książkę „Rspec on Rails” autorstwa thinkbot (świetna książka), a ten samouczek:http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html.
Podczas uruchamiania powyższej specyfikacji natrafiłem na ten błąd:
undefined|0|ReferenceError: Strict mode forbids implicit creation of global property 'csrf_token'
Trwało to bardzo długo, ponieważ naprawdę nie było to możliwe w przypadku tego błędu.
W końcu natknąłem się na użycie „use strict-mode” w JS. Zasadniczo użyjemy nowych konwencji skryptowych EMCA5. Pozwoli to na złapanie większej ilości kodowania i uniemożliwi dostęp do zmiennych globalnych. Wszystko co dobre.
Sprawdzam więc iw moim pliku sinon.js widzę:
"use strict";
w linii 36 pliku. I oto widzę komentarz, a moje testy działają dobrze.
Oto moje pytanie: Dlaczego użyto ścisłego bałaganu csrf? Zakładam, że ma to coś wspólnego z csrf_meta_tags w moim układzie szyny. Jeśli to możliwe, chciałbym umieścić tę linię z powrotem w sinon js, ponieważ zakładam, że jest to „właściwa rzecz do zrobienia”
Czy ktoś ma więcej informacji na ten temat? Doceniam wszelkie szczegóły z góry !!