小编Gon*_*bia的帖子

当我使用async/await功能时,Angular UI路由器不处理解析功能?

我一直在试图使本相关的状态和成分一定的样板文章

在我在dev-server下运行的项目中,一切正常,当我执行$state.go("home")组件模板时,我的预期是如何加载的,但是当我在测试环境中执行此操作时,这不起作用.

之前,在测试中,当我使用"模板"而不是"组件"与ui-router使用"旧方式"时,执行$rootScope.$digest()就足以在其中添加模板,<div ui-view></div>但是使用这种新方式,这不再起作用了.

我究竟做错了什么?

编辑:我一直在努力深入了解问题,我发现问题与已完成的HTTP请求有关.也许它与我的承诺使用async/await解析回调的方式有关.请检查服务:

服务

export class TodoService {
    constructor($http, BASE_URL) {
        this.http = $http;
        this.url = `${BASE_URL}/todos`
    }
    async getTodos() {
        const apiResponse = await this.http.get(this.url)
        return apiResponse.data.todos
    }
}
Run Code Online (Sandbox Code Playgroud)

路由器

import '@uirouter/angularjs'

export function routes($stateProvider, $locationProvider) {
    $locationProvider.html5Mode({
        enabled: true,
        requireBase: false,
        rewriteLinks: true,
    })

    $stateProvider
        .state("home", {
            url: "/",
            component: "todoList",
            resolve: {
                todosList: TodoService => TodoService.getTodos()
            }
        })
}
Run Code Online (Sandbox Code Playgroud)

测试

import { routes } from "routes" …
Run Code Online (Sandbox Code Playgroud)

javascript async-await angularjs angular-ui-router

38
推荐指数
1
解决办法
1559
查看次数

Docker:MacOSX将Container端口暴露给主机

在我的工作中,我使用docker和选项--net=host工作就像一个将docker容器端口转发到机器的魅力.这允许我通过示例添加使用某些端口的grunt任务:

  • A在9001港口提供我的承保报告
  • 我的应用程序的本地部署版本在端口9000中提供
  • 手表正在重新加载35729端口
  • 对于单元测试跑步者,请使用9876端口

当我开始在Mac中使用Docker时,我遇到的第一个问题是:该选项--net=host不再起作用了.我研究并且我理解为什么这是不可能的(Mac中的Docker在自己的虚拟机中运行)和我的瞬间解决方案它使用-p暴露端口的选项,但这个限制让我添加越来越多使用端口的任务因为我需要-p为我需要公开的每个端口运行显式命令.

有同样问题的人吗?怎么处理这个?

macos ports docker

13
推荐指数
1
解决办法
9025
查看次数

角度测试:窥探在控制器初始化时执行的函数

我一直试图窥探在控制器初始化时执行的函数,但测试总是失败.我一直在尝试执行$scope.$digest(),这不起作用,但在控制台中,我看到该函数已被调用.

我无法弄清楚这一点,有人可以向我解释为什么这不起作用?

Codepen示例:http://codepen.io/gpincheiraa/pen/KzZNby

调节器

function Controller($stateParams, $scope){

  $scope.requestAuthorization = requestAuthorization;

  if ($stateParams.requestAuthorization === true) {
    console.log('$stateParams.requestAuthorization');
    $scope.requestAuthorization();
  }
  function requestAuthorization() {
    console.log('requestAuthorization()');
  }
}
Run Code Online (Sandbox Code Playgroud)

测试

describe('AppCtrl', function(){
     var AppCtrl, $rootScope, $scope, $stateParams;

    beforeEach(module('exampleApp'));

    beforeEach(inject(function($controller, _$rootScope_, _$injector_, _$stateParams_) {
        $rootScope = _$rootScope_;
        $scope = $rootScope.$new();
        $stateParams = _$stateParams_;
        $stateParams.requestAuthorization = true;


        AppCtrl = $controller('AppCtrl',{
            $scope: $scope,
            $stateParams : $stateParams
        });

        spyOn($scope, 'requestAuthorization');          
    }));

     it('$stateParams.requestAuthorization should be defined', function() {             
        expect($stateParams.requestAuthorization).toBeDefined();
    });

    it('$scope.requestAuthorization should be defined', function() { …
Run Code Online (Sandbox Code Playgroud)

javascript angularjs karma-jasmine

11
推荐指数
1
解决办法
571
查看次数

Travis CI:Karma测试通过但总是得到错误的构建

我一直在尝试在我的自由项目中集成travis for CI.当我推送到我的存储库时,所有看起来karma start --single-run都没问题,但是在执行之后,travis的控制台不会停止执行业力启动任务.

如何解决这个问题?

.travis.yml

language: node_js
sudo: false
node_js:
  - 0.10
script: karma start -–single-run
before_install:
  - export DISPLAY=:99.0
  - sh -e /etc/init.d/xvfb start
before_script:
  - npm install -g bower 
  - npm install
  - bower install
Run Code Online (Sandbox Code Playgroud)

特拉维斯控制台 错误的构建

更新问题:为什么在travis过程中我在控制台中karma start --single-run使用选项时不会覆盖karma.conf.js中的选项singleRun:false?在我的本地环境中,这很好用.

node.js travis-ci karma-runner

8
推荐指数
1
解决办法
278
查看次数

Angular指令:可以测试某些字符在按键事件中是否被拒绝?

我一直在构建一个指令,限制用户按下某些无效字符,在这种情况下,使用keypress事件绑定到使用我的指令的输入元素.我一直在尝试测试这个功能,但我不明白如何实现这一点.

我的指示

angular
    .module('gp.rutValidator')
    .directive('gpRutValidator', directive);

  directive.$inject = ['$filter'];

  function directive($filter){
    var ddo = {
      restrict: 'A',
      require: 'ngModel',
      link: linkFn
    };
    return ddo;

    function linkFn(scope, element, attrs, ngModel){

      //valid characters are digits, dash and letter k
      var regexValidKeys = (/[\d\.\-k]/i);

      element.bind('keypress', function(e){

        var key = e.key || String.fromCharCode(e.keyCode);

        if (!regexValidKeys.test(key)) {
          e.preventDefault();
          return false;
        }

      });

    }
  }
Run Code Online (Sandbox Code Playgroud)

我的考试

describe('Angular Rut Validator Directive',validatorDirectiveSpec);

  function validatorDirectiveSpec(){

    //////////////  GLOBALS   ////////////////////////////////
    var scope, element, evt;
    //////////////  BEFORE EACH ////////////////////////////////
    beforeEach(module('gp.rutValidator')); …
Run Code Online (Sandbox Code Playgroud)

javascript testing jasmine angularjs angular-directive

6
推荐指数
1
解决办法
298
查看次数

Array.prototype.sort(compareFn)在浏览器中的工作方式不同?

我一直在测试比较函数作为回调,Array.prototype.sort(compareFn)当compareFn返回值= 0时,但我在Chrome中得到了一个意外的行为:

/* Chrome */
[1,2,3,4,5,6,7,8,9,10].sort(function(){return 0;});
//returns [1,2,3,4,5,6,7,8,9,10]
[1,2,3,4,5,6,7,8,9,10,11].sort(function(){return 0;})
//WUT? returns [6, 1, 3, 4, 5, 2, 7, 8, 9, 10, 11]

/* Firefox */
[1,2,3,4,5,6,7,8,9,10].sort(function(){return 0;});
//returns [1,2,3,4,5,6,7,8,9,10]
[1,2,3,4,5,6,7,8,9,10,11].sort(function(){return 0;});
//Work's fine: returns [1,2,3,4,5,6,7,8,9,10,11]
Run Code Online (Sandbox Code Playgroud)

谁知道这发生了什么?

javascript arrays sorting

6
推荐指数
1
解决办法
1012
查看次数

可以运行 npm 脚本并重定向到 stdout

我有以下两个 npm 脚本:

包.json

"scripts": {
  "check:coverage": "npm test && http-server -so -p 9000 coverage/lcov-report",
  "test": "jest --coverage --verbose"
}
Run Code Online (Sandbox Code Playgroud)

我的想法是,当我运行命令:时npm run check:coverage,该命令http-server将在第一个脚本运行成功(所有测试通过)或失败(一个或多个测试失败)后运行。但是,当测试失败时,错误不允许运行http-server

所以我的问题是: 是否可以将错误重定向到标准输出以独立于脚本的结果运行http-servernpm test

PS:我尝试使用|for 并行运行两个任务,但是如果在 http-server 打开页面时套件测试运行时间太长,则此时覆盖率报告尚未准备好。

stdout stderr npm npm-scripts

6
推荐指数
0
解决办法
1123
查看次数

使用私有svn + bower在dockerfile中不起作用

我一直在尝试使用docker来运行我的开发环境.我的堆栈有一个私人凉亭注册表需要.bowerrc在我的$HOME.

我的.bowerrc文件的格式是:

/home/.bowerrc(在我的docker中作为卷安装)

{
  "registry": "https://<user>:<password>@bower.mycompany.com",
  "timeout": 300000,
  "strict-ssl": false
}
Run Code Online (Sandbox Code Playgroud)

我在docker文件中挂载此文件的方法是使用以下命令:

docker run -it --net='host' -v $(pwd):/home/dev/app -v /home/USER/.dockershared/.bowerrc:/home/.bowerrc --name="myproject" --privileged bower-gulp:node0.12
Run Code Online (Sandbox Code Playgroud)

我的Dockerfile是为支持使用bower,gulp和svn的环境而构建的.这是Dockerfile

FROM node:0.12-wheezy
RUN useradd -ms /bin/bash dev
RUN chown -R dev:dev /home/dev
USER dev
ENV HOME /home/dev
ENV PATH "$PATH:/home/dev/.npm-global/bin"
WORKDIR /home/dev/app

RUN mkdir /home/dev/.npm-global && \
    npm config set prefix '/home/dev/.npm-global' && \
    npm install -g bower gulp && \
    apt-get install subversion

ENTRYPOINT ["/bin/sh", "-c", "/bin/bash"] …
Run Code Online (Sandbox Code Playgroud)

svn bower docker

5
推荐指数
1
解决办法
254
查看次数

Docker安装debian openjdk-7-jre

我一直在尝试在docker镜像中安装openjdk-7-jre.但是当我尝试安装它时,我收到以下错误:

E:无法获取http://security.debian.org/pool/updates/main/o/openjdk-7/openjdk-7-jre-headless_7u111-2.6.7-2~deb8u1_amd64.deb 连接失败[IP:200.17 .202.197 80]

我花了很多时间尝试这个.有关详细信息,Dockerfile中的指令是:

RUN apt-get update -qq && apt-get install -y -f xvfb wget 
RUN sed -i -re 's/([a-z]{2}\.)?archive.ubuntu.com|security.ubuntu.com/old-releases.ubuntu.com/g' /etc/apt/sources.list && \
    apt-get update -qq && \
    apt-get install --fix-missing -y -f openjdk-7-jre

RUN wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && \
    dpkg --unpack google-chrome-stable_current_amd64.deb && \
    apt-get install -f -y && \
    apt-get clean && \
    apt-get update && \
    rm google-chrome-stable_current_amd64.deb

RUN npm install -g protractor mocha jasmine cucumber && \
    webdriver-manager update && \
    apt-get update
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

openjdk debian docker

5
推荐指数
2
解决办法
1945
查看次数

测试:模拟在类方法中使用的节点获取依赖项

我有以下情况:

js

import fetch from 'node-fetch'
import httpClient from './myClient/httpClient'

 export default class{
    async init(){
       const response = await fetch('some_url')
       return httpClient.init(response.payload)
    }
}
Run Code Online (Sandbox Code Playgroud)

A_spec.js

import test from 'ava'
import sinon from 'sinon'
import fetch from 'node-fetch'
import httpClient from './myClient/httpClient'
import A from './src/A'

test('a async test', async (t) => {
    const instance = new A()
    const stubbedHttpInit = sinon.stub(httpClient, 'init')
    sinon.stub(fetch).returns(Promise.resolve({payload: 'data'})) //this doesn't work

    await instance.init()
    t.true(stubbedHttpInit.init.calledWith('data'))
})
Run Code Online (Sandbox Code Playgroud)

我的想法是检查是否已使用获取请求中获得的有效负载调用了 httpClient 的 init 方法。

我的问题是:当我测试 A 的 …

testing stub sinon ava

5
推荐指数
2
解决办法
6059
查看次数