返回博客首页
← 所有文章

使用 NativeScript 8.0 进行单元测试

2021年5月11日 — 作者:技术指导委员会 (TSC)

能够对您的 iOS 和 Android 应用进行单元测试对于任何团队来说都至关重要。让我们看看如何使用 NativeScript 8.0 进行单元测试。

1. NativeScript CLI >= 8.0.2

您需要最新的 NativeScript CLI 8.0.2 或更高版本。

npm install -g nativescript

然后,您可以使用 ns -v 命令确认您拥有最新版本。

2. 添加单元测试运行器

您可以使用以下命令将单元测试运行器添加到任何应用中:

ns test init

系统会提示您选择要使用的单元测试框架。

? Select testing framework: › - Use arrow-keys. Return to submit.
❯   jasmine
    mocha
    qunit

这将安装几个单元测试依赖项,并在您的应用中添加一个 tests 文件夹,其中包含以下 tests/example.ts 规范(例如,使用 Jasmine):

// A sample Jasmine test
describe("A suite", function() {
  it("contains spec with an expectation", function() {
    expect(true).toBe(true);
  });
});

3. 运行单元测试

iOS

ns test ios
ios unit test runner

Android

ns test android
android unit test runner

测试您的应用!

现在我们已经设置了单元测试,我们可以测试应用的各种方面。例如,让我们首先创建一个 iOS 和 Android 特定的单元测试。

创建 tests/device.android.ts 文件,内容如下:

import { Device } from "@nativescript/core";

describe("Android Device", function() {
  it("should use > 23 SDK", function() {
    expect(parseFloat(Device.sdkVersion) > 23).toBeTrue();
  });
});

当我们现在使用 ns test android 进行测试时,我们将看到:

ios unit test runner

类似地,让我们创建 tests/device.ios.ts 文件,内容如下:

import { Device } from "@nativescript/core";

describe("iOS Device", function() {
  it("should use > 14 SDK", function() {
    expect(Device.sdkVersion).toBe('12');
  });
});

当我们现在使用 ns test ios 进行测试时,我们将看到:

ios unit test runner

等等!这是个错误!

是的,绝对是一个失败的测试。让我们使用以下方法修复它:

import { Device } from "@nativescript/core";

describe("iOS Device", function() {
  it("should use > 14 SDK", function() {
    expect(parseFloat(Device.sdkVersion) > 14).toBeTrue();
  });
});

当我们现在使用 ns test ios 进行测试时,我们将看到:

ios unit test runner

如果您正在升级,则需要了解的版本概述

如果您已经在应用中使用了单元测试,并且只是更新依赖项,请确保您拥有上面提到的最新 CLI,以及在您的 devDependencies 中包含以下内容:

"devDependencies": {
  ...,
  "@nativescript/unit-test-runner": "~2.0.0",
  "@nativescript/webpack": "beta",
  ...
}

总结

对 iOS 和 Android 的 NativeScript 应用进行单元测试既高效又易于使用。我们希望这能帮助您为应用中的关键路径提供一些覆盖范围。

您也可以尝试使用 NativeScript 的不同“风格”,并且很快就会有一篇后续博文详细介绍一些特定风格的额外内容。