Javascript 未定义的| 0 |引用错误:严格模式禁止隐式创建全局属性';csrf#U令牌';
所以,这是我遇到的一个非常有趣的问题 我目前正在构建一个backbone.js-Rails应用程序。一般来说,只是为了学习而构建。我(和任何优秀的rails开发人员一样)在TDD/BDD方面做得最好,但我遇到了水豚的问题 我有一个集成规范,它只测试根路径的工作情况(主干历史记录开始,显示初始信息等) 我正在用jasmine、sinon和capybara/rspec/webkit进行测试。我大致遵循了thoughtbot的“Rspec on Rails”一书(顺便说一句,这本书很棒),以及本教程: 在运行上述规范时,我遇到了以下错误:Javascript 未定义的| 0 |引用错误:严格模式禁止隐式创建全局属性';csrf#U令牌';,javascript,ruby-on-rails,backbone.js,jasmine,sinon,Javascript,Ruby On Rails,Backbone.js,Jasmine,Sinon,所以,这是我遇到的一个非常有趣的问题 我目前正在构建一个backbone.js-Rails应用程序。一般来说,只是为了学习而构建。我(和任何优秀的rails开发人员一样)在TDD/BDD方面做得最好,但我遇到了水豚的问题 我有一个集成规范,它只测试根路径的工作情况(主干历史记录开始,显示初始信息等) 我正在用jasmine、sinon和capybara/rspec/webkit进行测试。我大致遵循了thoughtbot的“Rspec on Rails”一书(顺便说一句,这本书很棒),以及本教程:
undefined|0|ReferenceError: Strict mode forbids implicit creation of global property 'csrf_token'
我花了很长时间来整理这个问题,因为谷歌根本无法解决这个错误
最终我偶然发现在JS中使用了“使用严格模式”。本质上,这将使用一些新的EMCA5脚本约定。它将捕获更多的编码blooper,并阻止您访问全局变量。都是好事
所以我检查一下,在我的sinon.js文件中,我看到:
"use strict";
在文件的第36行。瞧,我把这行注释掉了,我的测试工作得很好
我的问题是:为什么要使用严格的csrf?我假设这与rails布局中的csrf_meta_标记有关。如果可能的话,我想把这一行放回sinon js,因为我认为这是“正确的做法”
有人有更多关于这方面的信息吗?我非常感谢您提前提供任何细节 它告诉您一个值正在分配给一个名为
csrf\u token
的变量,该变量尚未声明,例如
csrf_token = 'foo';
在非严格模式下,这将在执行该行代码时创建名为csrf_token
的全局对象属性(通常称为全局变量)
在严格模式下,它将抛出您看到的错误,因为严格模式阻止隐式创建全局变量。您还可以通过以下方式进行修复:
var csrf_token;
在全局上下文中与错误源代码相同的脚本元素或以前的脚本元素中的任何位置。它告诉您一个值正在分配给一个名为
csrf\u token
的变量,该变量尚未声明,例如
csrf_token = 'foo';
在非严格模式下,这将在执行该行代码时创建名为csrf_token
的全局对象属性(通常称为全局变量)
在严格模式下,它将抛出您看到的错误,因为严格模式阻止隐式创建全局变量。您还可以通过以下方式进行修复:
var csrf_token;
全局上下文中与错误源代码或上一个脚本元素位于同一脚本元素中的任意位置