Почему window.open () возвращает null в модульном тесте? - PullRequest
0 голосов
/ 19 сентября 2019

Я пишу модульный тест для метода, который запускает окно браузера, когда пользователь нажимает кнопку.

Тест не пройден, поскольку возвращается null.

При запускепроверить, что окно браузера не открыто.

При использовании приложения оно работает как положено.

Я видел много других SO вопросов, касающихся window.open (), возвращающего ноль или нетделать то, что хотел ОП, но все это связано с тем, чтобы браузер делал определенные вещи.Код, который я тестирую, делает то, что я хочу, когда он используется в веб-приложении, но я не могу написать для него проходной модульный тест.Этот модульный тест является шагом на пути исправления проблемы, возникающей на этапе после запуска этого метода, поэтому я хочу понять, почему этот тест не проходит.

Верхний ответ здесь наводит меня на мысль, что браузер может блокировать новое окно, потому что запрос поступает извне браузера, что приведет к возврату null.Я отключил блокировку всплывающих окон в Chrome на всякий случай.

Это main.dart:

import 'package:flutter_web/material.dart';
import 'dart:html' as html;

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      title: 'Minimal, Reproducible Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
    );
  }
}

class PrintReports extends StatelessWidget {

  const PrintReports({Key key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        RaisedButton(
          child: Text(
            "Print A Form . . ."
          ),
          color: Colors.blue,
          onPressed: () => { 
            // generate form . . .
            // request submission . . .
            // launch browser window . . .
          },
        ),
      ],
    );
  }

  Future launchURL(String download_url) 
  async {
    try {
      await html.window.open(download_url, "Get_Submission");
    } catch (e) {
      print(e);
    }
  }
}

Это test.dart:

import 'dart:html';

import 'package:flutter_tests/main.dart';
import 'package:test/test.dart';

void main(){
  test("_launchURL launches browser at correct URL", () async {
    // Arrange: setup the test
    PrintReports printReports = PrintReports();

    // Act
    WindowBase window = await printReports.launchURL("https://someurl.com/download");

    // Assert
    expect(window, WindowBase);
  });
}

Для запуска тестаЯ использую эту команду терминала: pub run test test/print_reports_card_test.dart -p chrome.

Текущие результаты теста:

00:14 +2 -1: _launchURL launches browser at correct URL [E]                                                                                      
  Expected: Type:<WindowBase>
    Actual: <null>

[ . . . I can post this redacted output if you think it might be relevant . . . ]

00:14 +2 -1: Some tests failed. 
...