Итак, это была довольно интересная проблема, с которой я столкнулся.
В настоящее время я создаю приложение backbone.js - Rails. Как правило, это делается для обучения. Я (как и любой хороший рельс dev) прилагаю все усилия в TDD/BDD, и у меня возникла проблема с capybara.
У меня есть спецификация интеграции, которая просто проверяет работу root_path (начинается история базы данных, отображает начальную информацию и т.д.).
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
Я запускаю тесты с жасмином, синоном и capybara/rspec/webkit. Я свободно слежу за книгой "Rspec on Rails" от мыслителя (кстати, замечательная книга), и этот урок: http://tinnedfruit.com/2011/03/03/testing-backbone-apps-with-jasmine-sinon.html.
При запуске указанной спецификации я наткнулся на эту ошибку:
undefined|0|ReferenceError: Strict mode forbids implicit creation of global property 'csrf_token'
Я долгое время разбирался в этом, потому что на эту ошибку действительно ничего не было.
В конце концов я наткнулся на использование "строгого режима" в JS. По сути, это будет использовать некоторые новые соглашения EMCA5 script. Он будет захватывать больше кодирования bloopers и не позволит вам получить доступ к глобальным переменным. Все хорошие вещи.
Итак, я проверяю, и в моем файле sinon.js я вижу:
"use strict";
в строке 36 файла. Lo и вот я прокомментирую строку, и мои тесты работают очень хорошо.
Вот мой вопрос: зачем использовать строгий беспорядок csrf? Я предполагаю, что это имеет какое-то отношение к csrf_meta_tags в моем рельсовом макете. Если возможно, я хотел бы вернуть эту строку в синус js, поскольку я предполагаю, что это "правильная вещь"
Есть ли у кого больше информации об этом? Я ценю любые детали заранее!