我一直在试图使本相关的状态和成分一定的样板文章
在我在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)在我的工作中,我使用docker和选项--net=host工作就像一个将docker容器端口转发到机器的魅力.这允许我通过示例添加使用某些端口的grunt任务:
当我开始在Mac中使用Docker时,我遇到的第一个问题是:该选项--net=host不再起作用了.我研究并且我理解为什么这是不可能的(Mac中的Docker在自己的虚拟机中运行)和我的瞬间解决方案它使用-p暴露端口的选项,但这个限制让我添加越来越多使用端口的任务因为我需要-p为我需要公开的每个端口运行显式命令.
有同样问题的人吗?怎么处理这个?
我一直试图窥探在控制器初始化时执行的函数,但测试总是失败.我一直在尝试执行$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) 我一直在尝试在我的自由项目中集成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?在我的本地环境中,这很好用.
我一直在构建一个指令,限制用户按下某些无效字符,在这种情况下,使用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) 我一直在测试比较函数作为回调,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)
谁知道这发生了什么?
我有以下两个 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 打开页面时套件测试运行时间太长,则此时覆盖率报告尚未准备好。
我一直在尝试使用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) 我一直在尝试在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)
我究竟做错了什么?
我有以下情况:
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 的 …