cpo*_*pow 12 javascript ruby-on-rails backbone.js jasmine sinon
所以,这是我遇到的一个非常有趣的问题.
我目前正在构建一个backbone.js - Rails应用程序.通常只是为了学习目的而构建它.我(就像任何好的rails dev)在TDD/BDD上做得最好,我遇到了水豚问题.
我有一个仅仅测试root_path工作的集成规范(Backbone历史记录启动,显示初始信息等等).
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
Run Code Online (Sandbox Code Playgroud)
我正在使用jasmine,sinon和capybara/rspec/webkit运行测试.我正在松散地遵循thinkbot上的"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'
Run Code Online (Sandbox Code Playgroud)
我花了很长时间对其进行排序,因为这个错误确实没有google-able.
最终我在JS中使用"use strict-mode"偶然发现了.本质上,这将使用一些新的EMCA5脚本约定.它将捕获更多编码bloopers,并使您无法访问全局变量.所有美好的事物.
所以我检查一下,在我的sinon.js文件中,我看到:
"use strict";
Run Code Online (Sandbox Code Playgroud)
在文件的第36行.瞧,我注意到这条线,我的测试工作得很好.
这是我的问题:为什么使用严格搞乱csrf?我假设这与我的rails布局中的csrf_meta_tags有关.如果可能的话,我想把这条线放回到sinon js中,因为我认为它是"正确的事情"
有没有人有这方面的更多信息?我提前感谢任何细节!
Rob*_*obG 22
它告诉您正在为一个csrf_token尚未声明的变量分配一个值,例如
csrf_token = 'foo';
Run Code Online (Sandbox Code Playgroud)
在非严格模式下,这将创建在csrf_token执行该行代码时调用的全局对象(通常称为全局变量)的属性.
在严格模式下,它会抛出您看到的错误,因为严格模式会阻止隐式创建全局变量.你也可以通过包括:
var csrf_token;
Run Code Online (Sandbox Code Playgroud)
全局上下文中与错误来源的代码相同的脚本元素中的任何位置,或前一个脚本元素.
| 归档时间: |
|
| 查看次数: |
12406 次 |
| 最近记录: |