小编H.R*_*imy的帖子

如何在玩笑单元测试中模拟私有 ngxs 状态服务依赖项/属性

我正在使用 ngxs 来管理我的应用程序的状态。

@State<EmployeesStateModel>({
  name: 'employees',
  defaults: {
    // ...
  }
})
@Injectable({
  providedIn: 'root'
})
export class EmployeesState {
  constructor(private employeesService: EmployeesService) {
  }

  @Action(GetEmployeesList)
  async getEmployeesList(ctx: StateContext<EmployeesStateModel>, action: GetEmployeesList) {

    const result = await this.employeesService
      .getEmployeeListQuery(0, 10).toPromise();
    // ...
  }
}
Run Code Online (Sandbox Code Playgroud)

问题

我不明白如何使用 jest 来模拟EmployeesService测试中的依赖关系。与 NGXS 测试相关的文档也没有提供任何示例。

我刚刚开始测试角度/节点应用程序,所以我不知道我在做什么。

我按照从这个 SO 问题中学到的知识进行了以下测试。

describe('EmployeesStateService', () => {
  let store: Store;
  let employeesServiceStub = {} as EmployeesService;

  beforeEach(() => {
    employeesServiceStub = {
      getEmployeeListQuery: jest.fn()
    };
    TestBed.configureTestingModule({
      imports: …
Run Code Online (Sandbox Code Playgroud)

unit-testing typescript jestjs angular ngxs

5
推荐指数
1
解决办法
879
查看次数

链接共享dll库cmake clion项目

我目前在 Clion 上有两个使用 cmake 的 C 项目。其中一个项目名为“sharedLibsDemo”,我试图在该项目中创建一个共享库。在另一个项目中,我想使用由“共享”项目创建的库。

目前,在“sharedLibsDemo”项目中,我有以下 cmake:

cmake_minimum_required(VERSION 3.7)
project(sharedLibsDemo)

set(CMAKE_C_STANDARD 11)
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_BINARY_DIR}")
set(SOURCE_FILES shared.c shared.h main.c)
add_library(shared SHARED ${SOURCE_FILES})
include(GenerateExportHeader)
GENERATE_EXPORT_HEADER(shared           # generates the export header shared_EXPORTS.h automatically
        BASE_NAME shared
        EXPORT_MACRO_NAME SHARED_EXPORTS
        EXPORT_FILE_NAME shared_EXPORTS.h
        STATIC_DEFINE SHARED_EXPORTS_BUILT_AS_STATIC) 

set(EXEC_FILES main.c)
add_executable(myexe ${EXEC_FILES})
target_link_libraries(myexe shared)
Run Code Online (Sandbox Code Playgroud)

但是,此 cmake 仅创建shared_EXPORTS.h、libshared.dll 和 libshared.dll.a` 文件。我设法使用 Mingw 本身创建 .lib 文件,并将所有这些文件(包括源代码的 .h 文件)放入一个文件夹中,并将该文件夹放在第二个项目的根文件夹中以便使用它。

但是,我到处寻找将库链接到第二个项目的可执行文件的方法。cmake 本身的文档假设我拥有大量的知识,但我却没有。是否有任何命令列表可以用来最终链接我的库。我已经尝试过“使用 find_package() 或 target_link_libraries”的通用答案,但无济于事。

编辑1

以下为内容shared.h

#include "shared_EXPORTS.h"
#ifndef SHAREDLIBSDEMO_LIBRARY_H
#define SHAREDLIBSDEMO_LIBRARY_H

void SHARED_EXPORTS sharedHello(void);

#endif
Run Code Online (Sandbox Code Playgroud)

根据@Shmuel H的建议。我将 …

c dll cmake clion

3
推荐指数
1
解决办法
8692
查看次数

ASP.Net Core 应用程序可在 Visual Studio 中运行,但不适用于 dotnet run

我有一个通过 Visual Studio 开始构建的 asp.net 核心应用程序,通常当我按 F5 或在 Visual Studio 中按调试按钮时它可以正常工作。

但是,如果我尝试dotnet run从命令行使用,它仍然可以工作并开始侦听默认端口 5000(我假设这是 kestrel 侦听)。 在此处输入图片说明

但是,如果我尝试使用http://localhost:5000通过任何浏览器访问该页面,我只会收到错误消息,提示无法连接。我知道如果我从 Visual Studio 运行,它会自动将我的应用程序置于 IIS 之后,但我不明白为什么如果应用程序只是自托管,它就不起作用。

我想将我的项目移动到 linux 环境,这是现在似乎阻止我的唯一事情。我已经测试过通过 cli 创建新的 dotnet 应用程序,如果我尝试通过浏览器访问,这些应用程序可以正常工作,但我在 VS 中创建的这个特定应用程序似乎不起作用。

我的dotnet --version回报 1.0.4

编辑(详细答案)

因此,要添加到下面 Sanket 的答案中,我还找出了我的应用程序仅在我将其设置ASPNETCORE_ENVIRONMENT为“开发”时才能运行的真正原因。

事实证明,我已经设置了一个测试邮件服务,仅当我的环境是这样的开发时才进行配置:

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, 
        WorldContextSeedData seeder)
    {

        if (env.IsEnvironment("Development"))
        {
            app.UseDeveloperExceptionPage(); 
            loggerFactory.AddDebug(LogLevel.Information);
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是在我的一个控制器中,我在没有检查环境的情况下初始化了邮件服务,如下所示:

public AppController(IMailService mailService, IConfigurationRoot config, WorldRepository repository, ILogger<AppController> logger, IHostingEnvironment env)
{
    _env = …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio asp.net-core

3
推荐指数
1
解决办法
3560
查看次数

标签 统计

angular ×1

asp.net-core ×1

c ×1

c# ×1

clion ×1

cmake ×1

dll ×1

jestjs ×1

ngxs ×1

typescript ×1

unit-testing ×1

visual-studio ×1