小编joh*_*col的帖子

如何让 TypeScript 了解自定义 Jest 匹配器?

我有一个使用 jest 的 react/typescript 项目,其中有一个自定义匹配器,例如:

export const MyCustomMatchers = {
    toBeTheSameAsRemote: function(_util: any, _customEqualityTesters: any) {
        return {
            compare: function(actual: Brand, expected: RemoteBrand) {
                const pass: boolean = attributesMatch(actual, expected);
                const message: string = pass
                    ? 'Local matches Remote'
                    : 'Local does not match Remote';

                return { pass, message: () => message };
            }
        };
    }
};
Run Code Online (Sandbox Code Playgroud)

我在我的测试中通过在describe函数内部进行引用:

beforeEach(() => {
  jasmine.addMatchers(MyCustomMatchers);
});
Run Code Online (Sandbox Code Playgroud)

并在it函数中像这样使用:

expect(localValue).toBeTheSameAsRemote(remoteValue);
Run Code Online (Sandbox Code Playgroud)

测试运行正常,但打字稿编译器无法识别匹配器,这是有道理的,因为我没有在类型系统中的任何地方定义它

Property 'toBeTheSameAsRemote' does not exist on type 'JestMatchersShape<Matchers<void, MyType[]>, Matchers<Promise<void>, …
Run Code Online (Sandbox Code Playgroud)

types typescript jasmine-matchers jestjs ts-jest

8
推荐指数
1
解决办法
2543
查看次数

@Convert @Id字段

我试着

@Id
@Column(name = "MY_ID_FIELD")
@Convert(converter = IdConverter.class)
private Long id;
Run Code Online (Sandbox Code Playgroud)

IdConverter是:

@Converter
public class IdConverter implements AttributeConverter<Long, BigDecimal> {

    @Override
    public BigDecimal convertToDatabaseColumn(Long attribute) {
        return BigDecimal.valueOf(attribute);
    }

    @Override
    public Long convertToEntityAttribute(BigDecimal dbData) {
        return dbData.longValue();
    }
}
Run Code Online (Sandbox Code Playgroud)

转换器将映射BigDecimal,属性字段类型Hibernate期望在sql server数据库中id列类型为数字,为Long.

我正在使用Spring Data Jpa,我的存储库正在使用Long,正如我所期望的那样

@Repository
public interface CityRepository extends JpaRepository<City, Long> { }
Run Code Online (Sandbox Code Playgroud)

你知道它为什么不工作吗?

hibernate jpa converter spring-data-jpa

6
推荐指数
2
解决办法
2345
查看次数

何时使用Angular 2工厂功能?

我无法想象我需要使用工厂提供商的情况.

根据官方文档https://angular.io/docs/ts/latest/guide/dependency-injection.html,情况是人们可能无法从另一个服务(服务)中访问服务(service-b)-a),但是,工厂功能确实(可以访问service-b).那么,什么时候真的会发生这样的事情呢?

angular-providers angular

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

未在 Spring 单元测试中注入 MapStruct 映射器

我正在使用 MapStruct 生成的一个映射器:

@Mapper
public interface CustomerMapper {
   Customer mapBankCustomerToCustomer(BankCustomerData bankCustomer);
}
Run Code Online (Sandbox Code Playgroud)

默认组件模型是spring(在pom.xml中设置)

<compilerArg>-Amapstruct.defaultComponentModel=spring</compilerArg>
Run Code Online (Sandbox Code Playgroud)

我有一个服务,我在其中注入了客户映射器,并且在运行应用程序时工作正常

@Autowired
private CustomerMapper customerMapper;
Run Code Online (Sandbox Code Playgroud)

但是当我运行涉及@SpringBootTest 的单元测试时

@SpringBootTest
@AutoConfigureMockMvc
@RunWith(SpringRunner.class)
public class SomeControllerTest {

    @Mock
    private SomeDependency someDependency;

    @InjectMocks
    private SomeController someController;

    @Test
    public void shouldDoSomething() {
        ...
    }

}
Run Code Online (Sandbox Code Playgroud)

我得到一个 org.springframework.beans.factory.UnsatisfiedDependencyException

通过字段“customerMapper”表达的不满意依赖

spring unit-testing dependency-injection mapstruct

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