小编Ter*_*nce的帖子

Angular ui路由器单元测试(状态到网址)

我在我的应用程序中对路由器进行单元测试时遇到了一些麻烦,该应用程序是在Angular ui路由器上构建的.我想测试的是状态转换是否适当地改变了URL(稍后会有更复杂的测试,但这是我开始的地方.)

这是我的应用程序代码的相关部分:

angular.module('scrapbooks')
 .config( function($stateProvider){
    $stateProvider.state('splash', {
       url: "/splash/",
       templateUrl: "/app/splash/splash.tpl.html",
       controller: "SplashCtrl"
    })
 })
Run Code Online (Sandbox Code Playgroud)

和测试代码:

it("should change to the splash state", function(){
  inject(function($state, $rootScope){
     $rootScope.$apply(function(){
       $state.go("splash");
     });
     expect($state.current.name).to.equal("splash");
  })
})
Run Code Online (Sandbox Code Playgroud)

关于Stackoverflow(以及官方的ui路由器测试代码)的类似问题建议在$ apply中包装$ state.go调用应该足够了.但我已经这样做了,州仍然没有更新.$ state.current.name保持为空.

javascript unit-testing angularjs angular-ui-router

79
推荐指数
3
解决办法
5万
查看次数

修改Nginx正则表达式,使其仅在某些情况下应用

我正在创建一个混合的PHP/Node.js应用程序.对于PHP,我使用的是Yii框架.在Node.js中,我使用express.

PHP正在运行Nginx.我使用proxy_pass指令将以/ node开头的任何请求汇集到在端口3000上运行的节点服务器(例如server.com/node/api代理到server.com:3000/api.)

这在大多数情况下效果很好.但是,我的Nginx配置文件中的一个指令确保不存在对不存在的静态文件的请求不会传递给Yii.相反,返回一个简单的404错误.该指令的原始版本如下所示:

location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|txt)$ {
    try_files $uri =404;
    #For production servers you can set expires header with a long period
    expires 3M;
}
Run Code Online (Sandbox Code Playgroud)

这个指令的问题是Node.js提供了一些静态文件(特别是socket.io客户端).当浏览器请求server.com/node/socket.io/socket.io.js时,上述规则被触发,Nginx返回404.

我想要做的是修改规则,以便只有当静态文件的请求前面没有/ node /时才返回404.我尝试了各种规则组合,但似乎都没有.在查阅了perl正则表达式文档之后,这里有一个我认为可行的文档,但不是:

location ~* (?<!/node/)\.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar|txt)$ {
    try_files $uri =404;
    expires 3M;
}
Run Code Online (Sandbox Code Playgroud)

我认为规则的负面/后面部分(?<!/node/)可以排除以/ node /开头的请求,但事实并非如此.相反,规则会因为真正不存在的js文件和socket.io.js(以及从Node.js提供的各种其他静态文件)而被触发.所以在这两种情况下我得到404.

我应该如何更改正则表达式,以便仅当请求不以/ node /开头时才应用规则?

php regex nginx node.js

3
推荐指数
1
解决办法
1328
查看次数