我有一个生成的 React 站点,我托管在 S3 存储桶中。我的一个组件在加载时尝试获取一些东西:
require('isomorphic-fetch')
...
componentDidMount() {
fetch(`${url}`)
.then(res => {
console.log(res);
this.setState({
users: res
})
})
.catch(e => {
// do nothing
})
}
Run Code Online (Sandbox Code Playgroud)
在url我取是AWS API网关。我通过下拉菜单在那里启用了 CORS,对默认配置没有任何更改。
在我的控制台中,对于远程站点和开发过程中的本地站点,我看到:
“加载失败url:请求的资源上不存在‘Access-Control-Allow-Origin’标头。” 等等
但是,在 Chrome 网络选项卡中,我可以看到请求和响应,状态为 200 等。但是,在控制台中, myconsole.log和this.setState永远不会被调用。
我知道 CORS 是一个常见的痛点,很多问题都涉及到 CORS。我的问题:为什么响应在“网络”选项卡中没有显示错误,而同时在控制台中出现错误?
我有一个递归方法,如果设置了标志,它将每五秒调用一次。我正在尝试编写一个测试来监视该方法,调用它,等待六秒钟,然后期望该方法被调用两次。我的测试失败了,因为间谍报告该方法仅被调用一次(初始调用)。
我正在使用Angular 风格指南,所以我将这些方法附加到this. 我怀疑从 angular-mocks 返回的控制器的范围可能存在问题$controller(),但我不确定 - 大多数人都将方法附加到$scope.
如果不将方法附加到$scope,我如何创建一个间谍来验证我的方法已被调用两次?
应用程序.js:
'use strict';
angular
.module('MyApp', [
//...
]);
angular
.module('MyApp')
.controller('MyController', MyController);
MyController.$inject = [
//...
];
function MyController() {
var vm = this;
vm.callMyself = callMyself;
vm.flag = false;
function callMyself () {
console.log('callMyself');
if (vm.flag) {
console.log('callMyself & flag');
setTimeout(vm.callMyself, 5000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
appSpec.js:
describe('MyController', function () {
var $scope;
beforeEach(function () {
module('MyApp');
});
beforeEach(inject(function($rootScope, $controller) { …Run Code Online (Sandbox Code Playgroud)