我正在为Angular2中的服务构建一些单元测试.
在我的服务中,我有以下代码:
var hash: string;
hash = this.window.location.hash;
但是,当我运行包含此代码的测试时,它将失败.
利用Window的所有功能会很棒,但是当我使用PhantomJs时,我认为这不可行(我也尝试过使用Chrome产生相同结果的功能).
在AngularJs中,我会使用模拟$ Window(或者至少是有问题的属性),但由于Angular2单元测试没有很多文档,我不知道如何做到这一点.
有人可以帮忙吗?
我当前的网址是http:// localhost:4200/test/dashboard.
我想使用angular 5功能打印基本网址,即http:// localhost:4200.
我需要获取我的Angular 2应用程序的完整基本URL(例如http:// localhost:5000或https://productionserver.com),以便我可以在应用程序的上下文中将其传递给第三方服务.应用程序的位置取决于它是开发,各种登台/测试环境还是生产,我想动态检测它,所以我不需要维护硬编码列表.
一个类似的问题已经提出,在过去,但答案(即使用window.location.hostname或window.location.origin属性的某些版本),只有当angular2应用程序正在被浏览器呈现工作.
我希望我的应用程序可以与Angular Universal一起使用,这意味着它需要在服务器端呈现,而无法访问像window.location这样的DOM对象.
任何想法如何实现这一目标?供参考,使用asp.net核心作为后端(使用默认的dotnet新角度模板).
我正在寻找一种方法来使用Angular2获取当前URL的主机.等等
http://example.com/myapp.html
Run Code Online (Sandbox Code Playgroud)
我想得到:
example.com
Run Code Online (Sandbox Code Playgroud)
(在angular1中我使用$ location.host()来解析它.有类似的东西吗?)
如何在不使用angular 7的情况下获取完整的当前URL window.location.href?
例如,假设我当前的网址是 http://localhost:8080/p/drinks?q=cold&price=200
如何获得完整的URL而不仅仅是完整的URL /p/drinks?q=cold&price=200?
我已经尝试过使用this.router.url此命令,但/p/drinks?q=cold&price=200不能提供完整的主机名。
我不想使用的window.location.href原因是它导致ng-toolkit / universal中的渲染出现问题
我尝试遵循此解决方案,这似乎与我存在相同的问题,并且也进行了更新
这是我的代码
windowProvider.js
import { InjectionToken, FactoryProvider } from '@angular/core';
export const WINDOW = new InjectionToken<Window>('window');
const windowProvider: FactoryProvider = {
provide: WINDOW,
useFactory: () => window
};
export const WINDOW_PROVIDERS = [
windowProvider
];
Run Code Online (Sandbox Code Playgroud)
在app.module.ts中
@NgModule({
.......
providers:[
.......
windowProvider
]
})
Run Code Online (Sandbox Code Playgroud)
在我的必填页面中:
import {WINDOW as WindowFactory} from '../../factory/windowProvider';
......
constructor(private router: Router, private helper: Helpers, …Run Code Online (Sandbox Code Playgroud)