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 !!

questionAnswers(1)

yourAnswerToTheQuestion