Reputation: 404
So I decided to add unit testing to my NS7/NG11 app, followed instructions from NS website and got to the point where the app would start but the screen is blank (all white).
Initialized tests with ns test init
, manually updated karma-webpack
in package.json
to v 5.0.0-alpha.5
as the default one had a bug that was fixed and should be released soon.
Command used to start testing is: ns test run --emulator
Testing in Tabs
template with Angular. When running ns run ios --emulator
the runs just fine and is usable.
Below is my package.json
:
{
"name": "@nativescript/template-tab-navigation-ng",
"main": "main.js",
"displayName": "Tabs",
"templateType": "App template",
"version": "7.0.6",
"description": "NativeScript Application",
"author": "NativeScript Team <[email protected]>",
"license": "SEE LICENSE IN <your-license-filename>",
"publishConfig": {
"access": "public"
},
"keywords": [
"nstudio",
"nativescript",
"mobile",
"angular",
"{N}",
"tns",
"template",
"tab",
"navigation",
"category-general"
],
"repository": "<fill-your-repository-here>",
"homepage": "https://github.com/NativeScript/nativescript-app-templates",
"bugs": {
"url": "https://github.com/NativeScript/NativeScript/issues"
},
"scripts": {
"lint": "tslint \"src/**/*.ts\""
},
"dependencies": {
"@angular/animations": "~11.0.0",
"@angular/common": "~11.0.0",
"@angular/compiler": "~11.0.0",
"@angular/core": "~11.0.0",
"@angular/forms": "~11.0.0",
"@angular/platform-browser": "~11.0.0",
"@angular/platform-browser-dynamic": "~11.0.0",
"@angular/router": "~11.0.0",
"@nativescript/angular": "~11.0.0",
"@nativescript/core": "~7.1.0",
"@nativescript/theme": "~2.3.0",
"@nativescript/unit-test-runner": "^1.0.2",
"reflect-metadata": "~0.1.12",
"rxjs": "^6.6.0",
"zone.js": "~0.11.1"
},
"devDependencies": {
"@angular/compiler-cli": "~11.0.0",
"@nativescript/ios": "7.1.0",
"@nativescript/webpack": "~4.0.0",
"@ngtools/webpack": "~11.0.0",
"@types/jasmine": "3.6.2",
"codelyzer": "~6.0.0",
"karma": "6.0.0",
"karma-jasmine": "4.0.1",
"karma-nativescript-launcher": "0.4.0",
"karma-webpack": "5.0.0-alpha.5",
"node-sass": "^4.14.1",
"tslint": "~6.1.3",
"typescript": "~4.0.0"
},
"private": "true",
"readme": "NativeScript Application"
}
and here's the console output when I run ns test ios --emulator
:
Webpack compilation complete. Watching for file changes.
Webpack build done!
Updating runtime package.json with configuration values...
Project successfully prepared (ios)
Successfully transferred all files on device DF60258A-B86C-4E93-BCEF-4E2ED154E007.
Restarting application on device DF60258A-B86C-4E93-BCEF-4E2ED154E007...
Successfully synced application org.nativescript.karmans7 on device DF60258A-B86C-4E93-BCEF-4E2ED154E007.
(RunningBoardServices) [com.apple.runningboard:connection] Identity resolved as application<org.nativescript.karmans7>
CONSOLE LOG: NSUTR: fetching http://127.0.0.1:9877/context.json
CONSOLE LOG: NSUTR: fetching http://172.16.1.6:9877/context.json
CONSOLE LOG: NSUTR: fetching http://172.16.1.4:9877/context.json
CONSOLE LOG: NSUTR: found karma at 127.0.0.1
CONSOLE LOG: NSUTR: found karma at 172.16.1.4
CONSOLE LOG: NSUTR: found karma at 172.16.1.6
CONSOLE LOG: NSUTR: connecting to karma at http://127.0.0.1:9877
CONSOLE LOG: ReferenceError: window is not defined
Upvotes: 2
Views: 1064
Reputation: 1375
It's an issue with NativeScript and Karma. They recommend using
"karma": "5.2.3",
in the meantime.
This also fixed it for me.
Upvotes: 1
Reputation: 5399
NativeScript does not have a window
object like a browser does. So any code that needs to pretend it is running in a browser, you basically need to add a global window object.
At the very top of your app.ts (or main.ts) depending on the NS flavor; add the line:
global.window = {};
or global.window = global
(If you are using TS, you will have to do (<any>global).
otherwise TypeScript will probably complain about global not being the correct type...
and that should fix the issue.
Upvotes: 0